<?xml version="1.0" encoding="UTF-8"?>
<robot generator="Robot 7.4.2 (Python 3.11.10 on linux)" generated="2026-04-18T03:05:36.180711" rpa="false" schemaversion="5">
<suite id="s1" name="bgpcep-bgp-ingest-mixed.txt">
<suite id="s1-s1" name="Singlepeer Changecount" source="/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/singlepeer_changecount.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-04-18T03:05:36.903344" level="INFO">${SuiteFastFail} = False</msg>
<arg>${SuiteFastFail}</arg>
<arg>False</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-18T03:05:36.899083" elapsed="0.004329"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-04-18T03:05:36.898585" elapsed="0.004909"/>
</kw>
<kw name="Setup_Karaf_Keywords" owner="KarafKeywords">
<kw name="ClusterManagement_Setup" owner="ClusterManagement">
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-18T03:05:36.908883" level="INFO">${already_done} = False</msg>
<var>${already_done}</var>
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>False</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="PASS" start="2026-04-18T03:05:36.905003" elapsed="0.003914"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-04-18T03:05:36.909208" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:36.909052" elapsed="0.000212"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:36.909009" elapsed="0.000280"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:36.909908" level="INFO">${ClusterManagement__has_setup_run} = True</msg>
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>True</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-18T03:05:36.909468" elapsed="0.000488"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-18T03:05:36.910464" level="INFO">${cluster_size} = 1</msg>
<var>${cluster_size}</var>
<arg>\${NUM_ODL_SYSTEM}</arg>
<arg>1</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="PASS" start="2026-04-18T03:05:36.910136" elapsed="0.000358"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Convert To Integer" owner="BuiltIn">
<arg>${cluster_size}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-18T03:05:36.911118" elapsed="0.000304"/>
</kw>
<msg time="2026-04-18T03:05:36.911549" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:05:36.911602" level="INFO">${possibly_int_of_members} = 1</msg>
<var>${status}</var>
<var>${possibly_int_of_members}</var>
<arg>BuiltIn.Convert_To_Integer</arg>
<arg>${cluster_size}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:36.910715" elapsed="0.000911"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-18T03:05:36.912192" level="INFO">${int_of_members} = 1</msg>
<var>${int_of_members}</var>
<arg>'${status}' != 'PASS'</arg>
<arg>${1}</arg>
<arg>${possibly_int_of_members}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-18T03:05:36.911803" elapsed="0.000417"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-18T03:05:36.913921" level="INFO">@{member_index_list} = [ ]</msg>
<var>@{member_index_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-18T03:05:36.913629" elapsed="0.000322"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-18T03:05:36.914503" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-18T03:05:36.914108" elapsed="0.000439"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-18T03:05:36.915120" level="INFO">&amp;{index_to_ip_mapping} = { }</msg>
<var>&amp;{index_to_ip_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-18T03:05:36.914758" elapsed="0.000391"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="ClusterManagement__Include_Member_Index" owner="ClusterManagement">
<kw name="Append To List" owner="Collections">
<arg>${member_index_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-18T03:05:36.918361" elapsed="0.000259"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:36.919133" level="INFO">${member_ip} = 10.30.170.68</msg>
<var>${member_ip}</var>
<arg>${ODL_SYSTEM_${index}_IP}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:05:36.918801" elapsed="0.000360"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${index_to_ip_mapping}</arg>
<arg>${index}</arg>
<arg>${member_ip}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-18T03:05:36.919320" elapsed="0.000402"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:36.920590" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:05:36.920267" elapsed="0.000352"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-18T03:05:36.920665" elapsed="0.000044"/>
</return>
<msg time="2026-04-18T03:05:36.920841" level="INFO">${session_alias} = ClusterManagement__session_1</msg>
<var>${session_alias}</var>
<arg>member_index=${index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-18T03:05:36.919948" elapsed="0.000918"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:05:36.921567" level="INFO">Creating Session using : alias=ClusterManagement__session_1, url=http://10.30.170.68:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x74a7f4361350&gt;, timeout=5, proxies=None, verify=False,                     debug=0 </msg>
<arg>${session_alias}</arg>
<arg>http://${member_ip}:${RESTCONFPORT}</arg>
<arg>auth=${AUTH}</arg>
<arg>timeout=${http_timeout}</arg>
<arg>max_retries=${http_retries}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="PASS" start="2026-04-18T03:05:36.921100" elapsed="0.000635"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${session_list}</arg>
<arg>${session_alias}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-18T03:05:36.921908" elapsed="0.000197"/>
</kw>
<arg>${index}</arg>
<arg>${member_index_list}</arg>
<arg>${session_list}</arg>
<arg>${index_to_ip_mapping}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Add a corresponding item based on index into the last three arguments.
Create the Http session whose alias is added to list.</doc>
<status status="PASS" start="2026-04-18T03:05:36.917678" elapsed="0.004487"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-18T03:05:36.917456" elapsed="0.004756"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="PASS" start="2026-04-18T03:05:36.915212" elapsed="0.007034"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:36.923088" level="INFO">${ClusterManagement__member_index_list} = [1]</msg>
<arg>\${ClusterManagement__member_index_list}</arg>
<arg>${member_index_list}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-18T03:05:36.922629" elapsed="0.000504"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:36.923732" level="INFO">${ClusterManagement__index_to_ip_mapping} = {1: '10.30.170.68'}</msg>
<arg>\${ClusterManagement__index_to_ip_mapping}</arg>
<arg>${index_to_ip_mapping}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-18T03:05:36.923305" elapsed="0.000473"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:36.924344" level="INFO">${ClusterManagement__session_list} = ['ClusterManagement__session_1']</msg>
<arg>\${ClusterManagement__session_list}</arg>
<arg>${session_list}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-18T03:05:36.923947" elapsed="0.000441"/>
</kw>
<arg>int_of_members=${int_of_members}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Construct index list, session list and IP mapping, publish them as suite variables.</doc>
<status status="PASS" start="2026-04-18T03:05:36.913123" elapsed="0.011324"/>
</kw>
<arg>http_timeout=${http_timeout}</arg>
<doc>Detect repeated call, or detect number of members and initialize derived suite variables.
Http sessions are created with parameters to not waste time when ODL is no accepting connections properly.</doc>
<status status="PASS" start="2026-04-18T03:05:36.904620" elapsed="0.019884"/>
</kw>
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:36.924721" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:36.924594" elapsed="0.000175"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:36.924573" 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-04-18T03:05:36.928064" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-18T03:05:36.927673" elapsed="0.000419"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-18T03:05:36.928570" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-18T03:05:36.928256" elapsed="0.000344"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-18T03:05:36.928647" elapsed="0.000032"/>
</return>
<msg time="2026-04-18T03:05:36.928807" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-18T03:05:36.927321" elapsed="0.001510"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-18T03:05:36.929846" level="INFO">${member_ip} = 10.30.170.68</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-18T03:05:36.929579" elapsed="0.000293"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-18T03:05:36.930772" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-18T03:05:36.935193" elapsed="0.000761"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:36.936904" level="INFO">Attempting to execute command "iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save" on remote system "10.30.170.68" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:36.936222" elapsed="0.000791"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-18T03:05:36.938268" level="INFO">${conn_id} = 1</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-18T03:05:36.937303" elapsed="0.001018"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-18T03:05:36.940412" level="INFO">Length is 0.</msg>
<msg time="2026-04-18T03:05:36.940613" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-18T03:05:36.939911" elapsed="0.000747"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:36.941009" elapsed="0.000501"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-18T03:05:36.942813" level="INFO">Logging into '10.30.170.68:22' as 'jenkins'.</msg>
<msg time="2026-04-18T03:05:37.330215" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Sat Apr 18 03:05:34 UTC 2026

  System load:  0.68               Processes:             130
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 8%                 IPv4 address for ens3: 10.30.170.68
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


[?2004h[jenkins@releng-35801-190-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-18T03:05:36.942398" elapsed="0.388007"/>
</kw>
<msg time="2026-04-18T03:05:37.330530" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:36.941937" elapsed="0.388895"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-18T03:05:36.938829" elapsed="0.392224"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-18T03:05:37.332155" level="INFO">Executing command 'iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save'.</msg>
<msg time="2026-04-18T03:05:37.345639" level="INFO">Command exited with return code 4.</msg>
<msg time="2026-04-18T03:05:37.345910" level="INFO">${stdout} = </msg>
<msg time="2026-04-18T03:05:37.346066" level="INFO">${stderr} = iptables v1.8.7 (nf_tables): unknown option "--dport"
Try `iptables -h' or 'iptables --help' for more information.
iptables-save v1.8.7 (nf_tables): Could not fetch rule set generation id: Permission ...</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-18T03:05:37.331616" elapsed="0.014523"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-18T03:05:37.346642" elapsed="0.000842"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:37.350107" level="INFO">iptables v1.8.7 (nf_tables): unknown option "--dport"
Try `iptables -h' or 'iptables --help' for more information.
iptables-save v1.8.7 (nf_tables): Could not fetch rule set generation id: Permission denied (you must be root)</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:37.348850" 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-04-18T03:05:37.351346" elapsed="0.000113"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:37.350749" elapsed="0.000968"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:37.350690" elapsed="0.001116"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-18T03:05:37.352507" elapsed="0.000184"/>
</return>
<status status="PASS" start="2026-04-18T03:05:37.351997" elapsed="0.000874"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:37.351955" elapsed="0.001004"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-18T03:05:37.353093" elapsed="0.000037"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:37.358010" elapsed="0.000475"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-18T03:05:37.358809" elapsed="0.000371"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-18T03:05:37.359465" elapsed="0.000314"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-18T03:05:37.354186" elapsed="0.005668"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-18T03:05:36.932908" elapsed="0.427127"/>
</kw>
<msg time="2026-04-18T03:05:37.360096" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:36.932230" elapsed="0.427928"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-18T03:05:36.931708" elapsed="0.428531"/>
</kw>
<msg time="2026-04-18T03:05:37.360281" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:36.931151" elapsed="0.429177"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:37.363142" elapsed="0.000328"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-18T03:05:37.363690" elapsed="0.000154"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-18T03:05:37.364104" elapsed="0.000126"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-18T03:05:37.360694" elapsed="0.003591"/>
</kw>
<msg time="2026-04-18T03:05:37.364382" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-18T03:05:36.930095" elapsed="0.434317"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:37.364936" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:37.364649" elapsed="0.000334"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-18T03:05:37.365034" elapsed="0.000036"/>
</return>
<arg>command=${command}</arg>
<arg>member_index=${index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-18T03:05:36.929205" elapsed="0.435975"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-18T03:05:36.929019" elapsed="0.436203"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-18T03:05:36.928885" elapsed="0.436381"/>
</for>
<arg>iptables -I INPUT -p tcp --dport ${KARAF_SHELL_PORT} -j ACCEPT; iptables-save</arg>
<doc>Cycle through indices (or all), run command on each.</doc>
<status status="PASS" start="2026-04-18T03:05:36.925026" elapsed="0.440306"/>
</kw>
<kw name="Comment" owner="BuiltIn">
<arg>First connections to Karaf console may fail, so WUKS is used. TODO: Track as a Bug.</arg>
<doc>Displays the given messages in the log file as keyword arguments.</doc>
<status status="PASS" start="2026-04-18T03:05:37.365521" elapsed="0.000264"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:37.379582" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:37.379418" elapsed="0.000223"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:37.379393" elapsed="0.000273"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-18T03:05:37.380048" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-18T03:05:37.379862" elapsed="0.000334"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:37.380667" level="INFO">{}</msg>
<arg>${connection_index_dict}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:37.380360" elapsed="0.000353"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:37.381172" level="INFO">1</msg>
<arg>${member_index}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:37.380870" elapsed="0.000348"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-18T03:05:37.382051" level="FAIL">Dictionary does not contain key '1'.</msg>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="FAIL" start="2026-04-18T03:05:37.381794" elapsed="0.000470">Dictionary does not contain key '1'.</status>
</kw>
<msg time="2026-04-18T03:05:37.382384" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:05:37.382429" level="INFO">${old_connection_index} = Dictionary does not contain key '1'.</msg>
<var>${status}</var>
<var>${old_connection_index}</var>
<arg>Get From Dictionary</arg>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:37.381387" elapsed="0.001065"/>
</kw>
<if>
<branch type="IF" condition="'${status}'=='PASS'">
<kw name="Run Keywords" owner="BuiltIn">
<arg>SSHLibrary.Switch_Connection</arg>
<arg>${old_connection_index}</arg>
<arg>AND</arg>
<arg>BuiltIn.Run_Keyword_And_Ignore_Error</arg>
<arg>SSHLibrary.Write</arg>
<arg>logout</arg>
<arg>AND</arg>
<arg>BuiltIn.Run_Keyword_And_Ignore_Error</arg>
<arg>SSHLibrary.Close_Connection</arg>
<doc>Executes all the given keywords in a sequence.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:37.382781" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:37.382546" elapsed="0.000309"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:37.382509" elapsed="0.000370"/>
</if>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-18T03:05:37.383692" level="INFO">${ip_address} = 10.30.170.68</msg>
<var>${ip_address}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-18T03:05:37.383396" elapsed="0.000323"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-04-18T03:05:37.383766" elapsed="0.000032"/>
</return>
<msg time="2026-04-18T03:05:37.383920" level="INFO">${odl_ip} = 10.30.170.68</msg>
<var>${odl_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-04-18T03:05:37.383097" elapsed="0.000847"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>${odl_ip}</arg>
<arg>port=${KARAF_SHELL_PORT}</arg>
<arg>prompt=${KARAF_PROMPT_LOGIN}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-18T03:05:37.384106" elapsed="0.000443"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-18T03:05:37.384846" level="INFO">index=4
host=10.30.170.68
alias=None
port=8101
timeout=10 seconds
newline=

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

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

[?1h=[90m~[0m                                                                                [?2004hopendaylight-user</msg>
<arg>${KARAF_USER}</arg>
<arg>${KARAF_PASSWORD}</arg>
<arg>loglevel=${loglevel}</arg>
<doc>Logs into the SSH server with the given ``username`` and ``password``.</doc>
<status status="PASS" start="2026-04-18T03:05:37.387826" elapsed="0.856734"/>
</kw>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:38.249934" elapsed="0.000448"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-18T03:05:38.250636" elapsed="0.000230"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-18T03:05:38.251086" elapsed="0.000128"/>
</kw>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-18T03:05:38.247025" elapsed="0.004253"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-18T03:05:38.245429" elapsed="0.005905"/>
</kw>
<arg>member_index=${index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for ${member_index},
close the previous connection. In any case create a new connection
to karaf console for ${member_index}, set correct prompt set and login to karaf console.
Store connection index for ${member_index} and restore the previous active connection.</doc>
<status status="PASS" start="2026-04-18T03:05:37.379038" elapsed="0.872361"/>
</kw>
<arg>3s</arg>
<arg>1s</arg>
<arg>Open_Controller_Karaf_Console_On_Background</arg>
<arg>member_index=${index}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-04-18T03:05:37.366607" elapsed="0.884848"/>
</kw>
<arg>BuiltIn.Wait_Until_Keyword_Succeeds</arg>
<arg>3s</arg>
<arg>1s</arg>
<arg>Open_Controller_Karaf_Console_On_Background</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:37.366180" elapsed="0.885338"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-18T03:05:37.366024" elapsed="0.885587"/>
</iter>
<var>${index}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="PASS" start="2026-04-18T03:05:37.365857" elapsed="0.885810"/>
</for>
<arg>http_timeout=${http_timeout}</arg>
<doc>Initialize ClusterManagement. Open ssh karaf connections to each ODL.</doc>
<status status="PASS" start="2026-04-18T03:05:36.903929" elapsed="1.347828"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Test_Suite_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:38.255268" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:38.255112" elapsed="0.000216"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:38.255078" elapsed="0.000287"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:38.260955" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:38.260834" elapsed="0.000173"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:38.260813" elapsed="0.000218"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-18T03:05:38.262142" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-18T03:05:38.261699" elapsed="0.000473"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-18T03:05:38.262678" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-18T03:05:38.262344" elapsed="0.000362"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-18T03:05:38.262752" elapsed="0.000038"/>
</return>
<msg time="2026-04-18T03:05:38.262923" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-18T03:05:38.261282" elapsed="0.001668"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:38.269636" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:38.269502" elapsed="0.000183"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:38.269482" elapsed="0.000226"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:38.271038" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:38.270905" elapsed="0.000181"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:38.270886" elapsed="0.000224"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-18T03:05:38.271702" level="INFO">${karaf_connection_index} = 4</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-18T03:05:38.271319" elapsed="0.000417"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-18T03:05:38.272245" level="INFO">${current_connection_index} = None</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:05:38.271998" elapsed="0.000274"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-18T03:05:38.366250" 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 "/ "b "g "p "[78Cc "[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-04-18T03:05:38.273086" elapsed="0.093390"/>
</kw>
<msg time="2026-04-18T03:05:38.366720" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-18T03:05:38.366770" level="INFO">${message_write} = @root&gt;log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "s "u "i "t "e "[C "/ "w "/ "w "o "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:38.272485" elapsed="0.094325"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-18T03:05:38.506090" level="INFO">"p "- "c "s "i "t "- "1 "n "o "d "e "- "b "g "p "- "i "n "g "e "s "t "- "m "i "x "e "d "- "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 "/ "b "g "p "c "e "p "/ "b "g "p "i "n "g "e "s "t "/ "s "[78Ci "[A[78Cn
 "g "l "e "p "e "e "r "_ "c "h "a "n "g "e "c "o "u "n "t ". "r "o "b "o "t "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-18T03:05:38.367742" elapsed="0.138571"/>
</kw>
<msg time="2026-04-18T03:05:38.506494" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-18T03:05:38.506560" level="INFO">${message_wait} =  "p "- "c "s "i "t "- "1 "n "o "d "e "- "b "g "p "- "i "n "g "e "s "t "- "m "i "x "e "d "- "a "l "l "- "v "a "n "a "d "i ...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:38.367070" elapsed="0.139530"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:38.507068" elapsed="0.000055"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:38.506722" elapsed="0.000503"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:38.506683" elapsed="0.000572"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:38.507919" level="INFO"> "p "- "c "s "i "t "- "1 "n "o "d "e "- "b "g "p "- "i "n "g "e "s "t "- "m "i "x "e "d "- "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 "/ "b "g "p "c "e "p "/ "b "g "p "i "n "g "e "s "t "/ "s "[78Ci "[A[78Cn
 "g "l "e "p "e "e "r "_ "c "h "a "n "g "e "c "o "u "n "t ". "r "o "b "o "t "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:38.507414" elapsed="0.000599"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:38.508334" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:38.508085" elapsed="0.000399"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:38.508065" elapsed="0.000447"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-18T03:05:38.508574" elapsed="0.000041"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:38.510686" elapsed="0.000462"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-18T03:05:38.511498" elapsed="0.000339"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-18T03:05:38.512176" elapsed="0.000250"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-18T03:05:38.509878" elapsed="0.002639"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-18T03:05:38.508904" elapsed="0.003772"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-18T03:05:38.270607" elapsed="0.242176"/>
</kw>
<msg time="2026-04-18T03:05:38.512885" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:05:38.512931" level="INFO">${message} =  "p "- "c "s "i "t "- "1 "n "o "d "e "- "b "g "p "- "i "n "g "e "s "t "- "m "i "x "e "d "- "a "l "l "- "v "a "n "a "d "i ...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:38.269870" elapsed="0.243100"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:05:38.513203" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-18T03:05:38.513050" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:38.513030" 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-04-18T03:05:38.513733" elapsed="0.000026"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:38.514083" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:05:38.514221" elapsed="0.000017"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-18T03:05:38.269194" elapsed="0.245140"/>
</kw>
<msg time="2026-04-18T03:05:38.514433" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:05:38.514478" level="INFO">${output} =  "p "- "c "s "i "t "- "1 "n "o "d "e "- "b "g "p "- "i "n "g "e "s "t "- "m "i "x "e "d "- "a "l "l "- "v "a "n "a "d "i ...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:38.263432" elapsed="0.251083"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:38.514901" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:38.514640" elapsed="0.000315"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:38.514622" elapsed="0.000357"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-18T03:05:38.263274" elapsed="0.251730"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-18T03:05:38.263015" elapsed="0.252029"/>
</for>
<arg>Starting suite ${SUITE_SOURCE}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-18T03:05:38.260487" elapsed="0.254613"/>
</kw>
<doc>Log suite name to karaf log, useful in suite setup.</doc>
<status status="PASS" start="2026-04-18T03:05:38.252547" elapsed="0.262610"/>
</kw>
<arg>KarafKeywords.Log_Test_Suite_Start_To_Controller_Karaf</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:38.251966" elapsed="0.263235"/>
</kw>
<doc>Prepare both FailFast and Karaf logging, log that the caller suite has started.
This keyword is to be used in suite setup, and without it the other keywords may not work properly.</doc>
<status status="PASS" start="2026-04-18T03:05:36.898143" elapsed="1.617111"/>
</kw>
<kw name="Create_Default_Session" owner="TemplatedRequests">
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:05:38.519965" level="INFO">Creating Session using : alias=default, url=http://10.30.170.68:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x74a7f438b7d0&gt;, timeout=5, 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-04-18T03:05:38.519566" elapsed="0.000547"/>
</kw>
<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-04-18T03:05:38.519126" elapsed="0.001058"/>
</kw>
<kw name="CC_Setup" owner="ChangeCounter">
<kw name="Create_Default_Session" owner="TemplatedRequests">
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:05:38.524804" level="INFO">Creating Session using : alias=default, url=http://10.30.170.68:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x74a7f46807d0&gt;, timeout=5, 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-04-18T03:05:38.524418" elapsed="0.000503"/>
</kw>
<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-04-18T03:05:38.523998" elapsed="0.000996"/>
</kw>
<kw name="WU_Setup" owner="WaitUtils">
<kw name="SC_Setup" owner="ScalarClosures">
<kw name="Closure_From_Keyword_And_Arguments" owner="ScalarClosures">
<return>
<value>${keyword}</value>
<value>${args}</value>
<value>${kwargs}</value>
<status status="PASS" start="2026-04-18T03:05:38.525953" elapsed="0.000029"/>
</return>
<msg time="2026-04-18T03:05:38.526167" level="INFO">${sc_fail} = ['BuiltIn.Fail', [], {}]</msg>
<var>${sc_fail}</var>
<arg>BuiltIn.Fail</arg>
<doc>Turn keyword with given arguments into a scalar closure.</doc>
<status status="PASS" start="2026-04-18T03:05:38.525768" elapsed="0.000426"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:38.530820" level="INFO">${ScalarClosures__fail} = ['BuiltIn.Fail', [], {}]</msg>
<arg>${ScalarClosures__fail}</arg>
<arg>${sc_fail}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-18T03:05:38.526366" elapsed="0.004512"/>
</kw>
<kw name="Closure_From_Keyword_And_Arguments" owner="ScalarClosures">
<return>
<value>${keyword}</value>
<value>${args}</value>
<value>${kwargs}</value>
<status status="PASS" start="2026-04-18T03:05:38.531303" elapsed="0.000034"/>
</return>
<msg time="2026-04-18T03:05:38.531528" level="INFO">${sc_identity} = ['BuiltIn.Set_Variable', ['placeholder'], {}]</msg>
<var>${sc_identity}</var>
<arg>BuiltIn.Set_Variable</arg>
<arg>placeholder</arg>
<doc>Turn keyword with given arguments into a scalar closure.</doc>
<status status="PASS" start="2026-04-18T03:05:38.531095" elapsed="0.000476"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:38.536030" level="INFO">${ScalarClosures__identity} = ['BuiltIn.Set_Variable', ['placeholder'], {}]</msg>
<arg>${ScalarClosures__identity}</arg>
<arg>${sc_identity}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-18T03:05:38.531767" elapsed="0.004309"/>
</kw>
<doc>Resource setup. Create closures and assign them to suite variables.</doc>
<status status="PASS" start="2026-04-18T03:05:38.525497" elapsed="0.010639"/>
</kw>
<doc>Call dependency setup. Perhaps needed.</doc>
<status status="PASS" start="2026-04-18T03:05:38.525198" elapsed="0.010984"/>
</kw>
<kw name="Closure_From_Keyword_And_Arguments" owner="ScalarClosures">
<return>
<value>${keyword}</value>
<value>${args}</value>
<value>${kwargs}</value>
<status status="PASS" start="2026-04-18T03:05:38.536585" elapsed="0.000029"/>
</return>
<msg time="2026-04-18T03:05:38.536794" level="INFO">${counter} = ['Get_Change_Count', [], {}]</msg>
<var>${counter}</var>
<arg>Get_Change_Count</arg>
<doc>Turn keyword with given arguments into a scalar closure.</doc>
<status status="PASS" start="2026-04-18T03:05:38.536385" elapsed="0.000435"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:38.541303" level="INFO">${ChangeCounter__getter} = ['Get_Change_Count', [], {}]</msg>
<arg>${ChangeCounter__getter}</arg>
<arg>${counter}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-18T03:05:38.536989" elapsed="0.004366"/>
</kw>
<doc>Initialize dependency libraries.</doc>
<status status="PASS" start="2026-04-18T03:05:38.520402" elapsed="0.021032"/>
</kw>
<kw name="PC_Setup" owner="PrefixCounting">
<kw name="WU_Setup" owner="WaitUtils">
<kw name="SC_Setup" owner="ScalarClosures">
<kw name="Closure_From_Keyword_And_Arguments" owner="ScalarClosures">
<return>
<value>${keyword}</value>
<value>${args}</value>
<value>${kwargs}</value>
<status status="PASS" start="2026-04-18T03:05:38.542681" elapsed="0.000029"/>
</return>
<msg time="2026-04-18T03:05:38.542895" level="INFO">${sc_fail} = ['BuiltIn.Fail', [], {}]</msg>
<var>${sc_fail}</var>
<arg>BuiltIn.Fail</arg>
<doc>Turn keyword with given arguments into a scalar closure.</doc>
<status status="PASS" start="2026-04-18T03:05:38.542482" elapsed="0.000439"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:38.543467" level="INFO">${ScalarClosures__fail} = ['BuiltIn.Fail', [], {}]</msg>
<arg>${ScalarClosures__fail}</arg>
<arg>${sc_fail}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-18T03:05:38.543089" elapsed="0.000420"/>
</kw>
<kw name="Closure_From_Keyword_And_Arguments" owner="ScalarClosures">
<return>
<value>${keyword}</value>
<value>${args}</value>
<value>${kwargs}</value>
<status status="PASS" start="2026-04-18T03:05:38.544117" elapsed="0.000029"/>
</return>
<msg time="2026-04-18T03:05:38.544331" level="INFO">${sc_identity} = ['BuiltIn.Set_Variable', ['placeholder'], {}]</msg>
<var>${sc_identity}</var>
<arg>BuiltIn.Set_Variable</arg>
<arg>placeholder</arg>
<doc>Turn keyword with given arguments into a scalar closure.</doc>
<status status="PASS" start="2026-04-18T03:05:38.543719" elapsed="0.000637"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:38.544935" level="INFO">${ScalarClosures__identity} = ['BuiltIn.Set_Variable', ['placeholder'], {}]</msg>
<arg>${ScalarClosures__identity}</arg>
<arg>${sc_identity}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-18T03:05:38.544545" elapsed="0.000432"/>
</kw>
<doc>Resource setup. Create closures and assign them to suite variables.</doc>
<status status="PASS" start="2026-04-18T03:05:38.542244" elapsed="0.002790"/>
</kw>
<doc>Call dependency setup. Perhaps needed.</doc>
<status status="PASS" start="2026-04-18T03:05:38.541978" elapsed="0.003101"/>
</kw>
<doc>Call dependency setups and construct suite variables.</doc>
<status status="PASS" start="2026-04-18T03:05:38.541721" elapsed="0.003403"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:05:38.545730" level="INFO">Creating Session using : alias=operational, url=http://10.30.170.68:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x74a7f4495490&gt;, timeout=125, proxies=None, verify=False,                     debug=0 </msg>
<arg>operational</arg>
<arg>http://${ODL_SYSTEM_IP}:${RESTCONFPORT}</arg>
<arg>auth=${AUTH}</arg>
<arg>timeout=125</arg>
<arg>max_retries=0</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="PASS" start="2026-04-18T03:05:38.545291" elapsed="0.000587"/>
</kw>
<kw name="Set Default Configuration" owner="SSHLibrary">
<arg>prompt=${TOOLS_SYSTEM_PROMPT}</arg>
<doc>Update the default `configuration`.</doc>
<status status="PASS" start="2026-04-18T03:05:38.546055" elapsed="0.000183"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>${TOOLS_SYSTEM_IP}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-18T03:05:38.546402" elapsed="0.000221"/>
</kw>
<kw name="Flexible_Mininet_Login" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-18T03:05:38.548322" level="INFO">Length is 0.</msg>
<msg time="2026-04-18T03:05:38.548401" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-18T03:05:38.548038" elapsed="0.000387"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:38.548610" elapsed="0.000337"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-18T03:05:38.549916" level="INFO">Logging into '10.30.170.251:22' as 'jenkins'.</msg>
<msg time="2026-04-18T03:05:39.290203" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-153-generic x86_64)

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

 System information as of Sat Apr 18 03:05:38 UTC 2026

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


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


[?2004h[jenkins@releng-35801-190-1-mininet-ovs-217-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-18T03:05:38.549579" elapsed="0.740838"/>
</kw>
<msg time="2026-04-18T03:05:39.290513" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:38.549138" elapsed="0.741482"/>
</kw>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-18T03:05:38.547594" elapsed="0.743163"/>
</kw>
<msg time="2026-04-18T03:05:39.290820" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Flexible SSH Login</arg>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:38.547172" elapsed="0.743697"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-04-18T03:05:38.546831" elapsed="0.744120"/>
</kw>
<kw name="Require_Python" owner="SSHKeywords">
<kw name="Execute_Command_Passes" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-18T03:05:39.292474" level="INFO">Executing command 'python3 --help'.</msg>
<msg time="2026-04-18T03:05:39.305376" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-18T03:05:39.305668" level="INFO">${stdout} = usage: python3 [option] ... [-c cmd | -m mod | file | -] [arg] ...
Options and arguments (and corresponding environment variables):
-b     : issue warnings about str(bytes_instance), str(bytearray_ins...</msg>
<msg time="2026-04-18T03:05:39.305765" level="INFO">${stderr} = </msg>
<msg time="2026-04-18T03:05:39.305842" level="INFO">${rc} = 0</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>${command}</arg>
<arg>return_stderr=True</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-18T03:05:39.292260" elapsed="0.013618"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:05:39.307904" level="INFO">Length is 0.</msg>
<arg>${stderr}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="PASS" start="2026-04-18T03:05:39.307104" elapsed="0.000908"/>
</kw>
<msg time="2026-04-18T03:05:39.308234" level="INFO">${emptiness_status} = PASS</msg>
<msg time="2026-04-18T03:05:39.308333" level="INFO">${result} = None</msg>
<var>${emptiness_status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${stderr}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:39.306425" elapsed="0.001959"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-18T03:05:39.310072" level="INFO">${success} = True</msg>
<var>${success}</var>
<arg>(${rc} == 0) and (("${emptiness_status}" == "PASS") or not ${stderr_must_be_empty})</arg>
<arg>True</arg>
<arg>False</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-18T03:05:39.308821" elapsed="0.001314"/>
</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">
<arg>${stdout}</arg>
<arg>${stderr}</arg>
<arg>${rc}</arg>
<doc>Log everything returned by SSHLibrary.Execute_Command</doc>
<status status="NOT RUN" start="2026-04-18T03:05:39.311261" elapsed="0.000092"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:39.310325" elapsed="0.001118"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:39.310273" elapsed="0.001229"/>
</if>
<if>
<branch type="IF" condition="${return_success_only}">
<return>
<value>${success}</value>
<status status="PASS" start="2026-04-18T03:05:39.311925" elapsed="0.000074"/>
</return>
<status status="PASS" start="2026-04-18T03:05:39.311680" elapsed="0.000402"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:39.311637" elapsed="0.000508"/>
</if>
<if>
<branch type="IF" condition="${success}">
<return>
<value>${stdout}</value>
<status status="NOT RUN" start="2026-04-18T03:05:39.312361" elapsed="0.000032"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:39.312278" elapsed="0.000470"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:05:39.312241" elapsed="0.000581"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Got rc: ${rc} or stderr was not empty: ${stderr}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:39.315032" elapsed="0.000099"/>
</kw>
<msg time="2026-04-18T03:05:39.315620" level="INFO">${passed} = True</msg>
<var>${passed}</var>
<arg>python3 --help</arg>
<doc>Execute command via the active SSH connection. For success, rc has to be zero and optionally stderr has to be empty.
Log everything, depending on arguments and success. Return either success string or stdout.
TODO: Do we want to support customizing return values the same way as SSHLibrary.Execute_Command does?</doc>
<status status="PASS" start="2026-04-18T03:05:39.291889" elapsed="0.023762"/>
</kw>
<if>
<branch type="IF" condition="${passed}">
<return>
<status status="PASS" start="2026-04-18T03:05:39.315826" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-18T03:05:39.315727" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:39.315708" elapsed="0.000199"/>
</if>
<kw name="Fatal Error" owner="BuiltIn">
<arg>Python 3 is not installed!</arg>
<doc>Stops the whole test execution.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:39.316059" elapsed="0.000022"/>
</kw>
<doc>Verify current SSH connection leads to machine with python working. Fatal fail otherwise.</doc>
<status status="PASS" start="2026-04-18T03:05:39.291406" elapsed="0.024734"/>
</kw>
<kw name="Assure_Library_Ipaddr" owner="SSHKeywords">
<kw name="Execute_Command_Passes" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-18T03:05:39.317505" level="INFO">Executing command 'bash -c 'cd "." &amp;&amp; python -c "import ipaddr"''.</msg>
<msg time="2026-04-18T03:05:39.466784" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-18T03:05:39.467072" level="INFO">${stdout} = </msg>
<msg time="2026-04-18T03:05:39.467135" level="INFO">${stderr} = Traceback (most recent call last):
  File "&lt;string&gt;", line 1, in &lt;module&gt;
ModuleNotFoundError: No module named 'ipaddr'</msg>
<msg time="2026-04-18T03:05:39.467198" level="INFO">${rc} = 1</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>${command}</arg>
<arg>return_stderr=True</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-18T03:05:39.317287" elapsed="0.149945"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:05:39.468763" level="INFO">Length is 119.</msg>
<msg time="2026-04-18T03:05:39.468921" level="FAIL">'Traceback (most recent call last):
  File "&lt;string&gt;", line 1, in &lt;module&gt;
ModuleNotFoundError: No module named 'ipaddr'' should be empty.</msg>
<arg>${stderr}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:05:39.468286" elapsed="0.000788">'Traceback (most recent call last):
  File "&lt;string&gt;", line 1, in &lt;module&gt;
ModuleNotFoundError: No module named 'ipaddr'' should be empty.</status>
</kw>
<msg time="2026-04-18T03:05:39.469268" level="INFO">${emptiness_status} = FAIL</msg>
<msg time="2026-04-18T03:05:39.469332" level="INFO">${result} = 'Traceback (most recent call last):
  File "&lt;string&gt;", line 1, in &lt;module&gt;
ModuleNotFoundError: No module named 'ipaddr'' should be empty.</msg>
<var>${emptiness_status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${stderr}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:39.467664" elapsed="0.001703"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-18T03:05:39.470292" level="INFO">${success} = False</msg>
<var>${success}</var>
<arg>(${rc} == 0) and (("${emptiness_status}" == "PASS") or not ${stderr_must_be_empty})</arg>
<arg>True</arg>
<arg>False</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-18T03:05:39.469647" elapsed="0.000685"/>
</kw>
<if>
<branch type="IF" condition="(${log_on_success} and ${success}) or (${log_on_failure} and not ${success})">
<kw name="Log_Command_Results" owner="SSHKeywords">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:39.472397" level="INFO"/>
<arg>${stdout}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:39.471819" elapsed="0.000763"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:39.474959" level="INFO">Traceback (most recent call last):
  File "&lt;string&gt;", line 1, in &lt;module&gt;
ModuleNotFoundError: No module named 'ipaddr'</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:39.472947" elapsed="0.002130"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:39.476161" level="INFO">1</msg>
<arg>${rc}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:39.475496" elapsed="0.000785"/>
</kw>
<arg>${stdout}</arg>
<arg>${stderr}</arg>
<arg>${rc}</arg>
<doc>Log everything returned by SSHLibrary.Execute_Command</doc>
<status status="PASS" start="2026-04-18T03:05:39.471149" elapsed="0.005265"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:39.470500" elapsed="0.006107"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:39.470460" elapsed="0.006324"/>
</if>
<if>
<branch type="IF" condition="${return_success_only}">
<return>
<value>${success}</value>
<status status="PASS" start="2026-04-18T03:05:39.477196" elapsed="0.000071"/>
</return>
<status status="PASS" start="2026-04-18T03:05:39.476938" elapsed="0.000415"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:39.476895" elapsed="0.000516"/>
</if>
<if>
<branch type="IF" condition="${success}">
<return>
<value>${stdout}</value>
<status status="NOT RUN" start="2026-04-18T03:05:39.477651" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:39.477588" elapsed="0.000104"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:05:39.477504" elapsed="0.000209"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Got rc: ${rc} or stderr was not empty: ${stderr}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:39.477865" elapsed="0.000026"/>
</kw>
<msg time="2026-04-18T03:05:39.478021" level="INFO">${passed} = False</msg>
<var>${passed}</var>
<arg>bash -c 'cd "${target_dir}" &amp;&amp; python -c "import ipaddr"'</arg>
<doc>Execute command via the active SSH connection. For success, rc has to be zero and optionally stderr has to be empty.
Log everything, depending on arguments and success. Return either success string or stdout.
TODO: Do we want to support customizing return values the same way as SSHLibrary.Execute_Command does?</doc>
<status status="PASS" start="2026-04-18T03:05:39.316865" elapsed="0.161183"/>
</kw>
<if>
<branch type="IF" condition="${passed}">
<return>
<status status="NOT RUN" start="2026-04-18T03:05:39.478213" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:39.478120" elapsed="0.000131"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:39.478103" elapsed="0.000170"/>
</if>
<kw name="Put File" owner="SSHLibrary">
<msg time="2026-04-18T03:05:39.512758" level="INFO">[chan 3] Opened sftp connection (server version 3)</msg>
<msg time="2026-04-18T03:05:39.525609" level="INFO">'/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/BGPCEP/ipaddr.py' -&gt; '/home/jenkins/.//ipaddr.py'</msg>
<arg>/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/BGPCEP/ipaddr.py</arg>
<arg>${target_dir}/</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="PASS" start="2026-04-18T03:05:39.478425" elapsed="0.047283"/>
</kw>
<arg>target_dir=.</arg>
<doc>Tests whether ipaddr module is present on ssh-connected machine, Puts ipaddr.py to target_dir if not.</doc>
<status status="PASS" start="2026-04-18T03:05:39.316395" elapsed="0.209418"/>
</kw>
<kw name="Put File" owner="SSHLibrary">
<msg time="2026-04-18T03:05:39.537816" level="INFO">'/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../../tools/fastbgp/play.py' -&gt; '/home/jenkins//play.py'</msg>
<arg>/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../../tools/fastbgp/play.py</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="PASS" start="2026-04-18T03:05:39.526072" elapsed="0.011831"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:39.538798" level="INFO">${timeout} = 980.0</msg>
<var>${timeout}</var>
<arg>${TEST_DURATION_MULTIPLIER_CHANGE_COUNT_SINGLE} * (${COUNT_CHANGE_COUNT_SINGLE} * 9.0 / 10000 + 20)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:39.538147" elapsed="0.000691"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:39.545555" level="INFO">${bgp_filling_timeout} = 980.0</msg>
<arg>${bgp_filling_timeout}</arg>
<arg>${timeout}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-18T03:05:39.539085" elapsed="0.006541"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:39.552386" level="INFO">${bgp_emptying_timeout} = 735.0</msg>
<arg>${bgp_emptying_timeout}</arg>
<arg>${bgp_filling_timeout*3.0/4}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-18T03:05:39.545832" elapsed="0.006604"/>
</kw>
<doc>Setup imported resources, SSH-login to tools system,
create HTTP session, put Python tool to tools system.</doc>
<status status="PASS" start="2026-04-18T03:05:36.897704" elapsed="2.654798"/>
</kw>
<test id="s1-s1-t1" name="Check_For_Empty_Ipv4_Topology_Before_Talking" line="88">
<kw name="Setup_Test_With_Logging_And_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Fail_This_Fast_On_Previous_Error" owner="FailFast">
<if>
<branch type="IF" condition="'''${SuiteFastFail}'''=='True'">
<kw name="Fail" owner="BuiltIn">
<arg>SKIPPED due to a failure in a previous fundamental test case.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:39.556391" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:39.556097" elapsed="0.000367"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:39.556075" elapsed="0.000424"/>
</if>
<doc>Mark (immediately) this test case as failed when fast-fail is enabled in suite.</doc>
<status status="PASS" start="2026-04-18T03:05:39.555902" elapsed="0.000668"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:39.557699" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:39.557577" elapsed="0.000173"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:39.557552" 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-04-18T03:05:39.562793" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:39.562684" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:39.562666" elapsed="0.000197"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-18T03:05:39.563902" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-18T03:05:39.563484" elapsed="0.000446"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-18T03:05:39.564399" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-18T03:05:39.564095" elapsed="0.000330"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-18T03:05:39.564468" elapsed="0.000036"/>
</return>
<msg time="2026-04-18T03:05:39.564652" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-18T03:05:39.563100" elapsed="0.001576"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:39.570514" elapsed="0.000031"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:39.570401" elapsed="0.000179"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:39.570381" elapsed="0.000222"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:39.571821" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:39.571712" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:39.571694" elapsed="0.000197"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-18T03:05:39.572353" level="INFO">${karaf_connection_index} = 4</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-18T03:05:39.572043" elapsed="0.000337"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-18T03:05:39.572790" level="INFO">${current_connection_index} = 7</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:05:39.572565" elapsed="0.000251"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-18T03:05:39.643251" 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 "b "g "p "c "e "p "- "b "g "p "- "i "n "g "e "s "t "[78C- "[A[78Cm</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-18T03:05:39.573423" elapsed="0.070054"/>
</kw>
<msg time="2026-04-18T03:05:39.643763" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-18T03:05:39.643814" 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 "b "g "p "c "e "p "- "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:39.572982" elapsed="0.070872"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-18T03:05:39.760448" level="INFO">"i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "C "h "e "c "k "_ "F "o "r "_ "E "m "p "t "y "_ "I "p "v "4 "_ "T "o "p "o "l "o "g "y "_ "B "e "f "o "r "e "_ "T "a "l "k "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-04-18T03:05:39.644589" elapsed="0.116161"/>
</kw>
<msg time="2026-04-18T03:05:39.760999" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-18T03:05:39.761047" level="INFO">${message_wait} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "C "h "e "c "k "_ "F "...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:39.644104" elapsed="0.116980"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:39.761576" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:39.761220" elapsed="0.000417"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:39.761177" elapsed="0.000487"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:39.762278" level="INFO"> "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "C "h "e "c "k "_ "F "o "r "_ "E "m "p "t "y "_ "I "p "v "4 "_ "T "o "p "o "l "o "g "y "_ "B "e "f "o "r "e "_ "T "a "l "k "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-04-18T03:05:39.761814" elapsed="0.000549"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:39.762723" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:39.762433" elapsed="0.000348"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:39.762413" elapsed="0.000392"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-18T03:05:39.762845" elapsed="0.000042"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:05:39.765752" elapsed="0.000157"/>
</kw>
<msg time="2026-04-18T03:05:39.766049" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:39.764455" elapsed="0.001784"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:39.766636" elapsed="0.000078"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:39.766981" elapsed="0.000074"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-18T03:05:39.763803" elapsed="0.003368"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-18T03:05:39.763190" elapsed="0.004045"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-18T03:05:39.571378" elapsed="0.195957"/>
</kw>
<msg time="2026-04-18T03:05:39.767434" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:05:39.767479" level="INFO">${message} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "C "h "e "c "k "_ "F "...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:39.570764" elapsed="0.196752"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:05:39.767816" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-18T03:05:39.767699" elapsed="0.000177"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:39.767678" 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-04-18T03:05:39.768337" elapsed="0.000026"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:39.768709" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:05:39.768781" elapsed="0.000016"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-18T03:05:39.569996" elapsed="0.198897"/>
</kw>
<msg time="2026-04-18T03:05:39.768989" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:05:39.769034" level="INFO">${output} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "C "h "e "c "k "_ "F "...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:39.565121" elapsed="0.203949"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:39.769405" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:39.769146" elapsed="0.000312"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:39.769128" elapsed="0.000354"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-18T03:05:39.564939" elapsed="0.204567"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-18T03:05:39.564741" elapsed="0.204821"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-18T03:05:39.562303" elapsed="0.207331"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-18T03:05:39.557237" elapsed="0.212468"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:39.556736" elapsed="0.213016"/>
</kw>
<doc>Test case setup which skips on previous failure. If not, logs test case name to Karaf log.
Recommended to be used as the default test case setup.</doc>
<status status="PASS" start="2026-04-18T03:05:39.553552" elapsed="0.216269"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Ipv4_Topology_Is_Empty" owner="PrefixCounting">
<kw name="Check_Ipv4_Topology_Count" owner="PrefixCounting">
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get_Ipv4_Topology_Count" owner="PrefixCounting">
<kw name="Get_Ipv4_Topology" owner="PrefixCounting">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:05:43.414036" level="INFO">GET Request : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-18T03:05:43.415781" level="INFO">GET Response : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Set-Cookie': 'JSESSIONID=node0cikoz8bf13pu14i8fg3ixh1ws0.node0; Path=/rests; HttpOnly, rememberMe=deleteMe; Path=/rests; Max-Age=0; Expires=Fri, 17-Apr-2026 03:05:43 GMT; SameSite=lax', 'Expires': 'Thu, 01 Jan 1970 00:00:00 GMT', 'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '293'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xmlns="urn:opendaylight:params:xml:ns:yang:odl-bgp-topology-types"/&gt;&lt;/topology-types&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-04-18T03:05:43.416152" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${PC_NW_TOPOLOGY}=${topology}?content=nonconfig</arg>
<arg>expected_status=anything</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-18T03:05:39.774103" elapsed="3.642135"/>
</kw>
<if>
<branch type="IF" condition="${response.status_code} != 200">
<kw name="Fail" owner="BuiltIn">
<arg>Get on ${topology} returned status code ${response.status_code} with message: ${response.text}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:43.421638" elapsed="0.000041"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:43.416577" elapsed="0.005156"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:43.416463" elapsed="0.005308"/>
</if>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-18T03:05:43.421826" elapsed="0.000076"/>
</return>
<msg time="2026-04-18T03:05:43.425587" level="INFO">${topology} = &lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xml...</msg>
<var>${topology}</var>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>GET the example-ipv4-topology data, check status is 200, return the topology data.</doc>
<status status="PASS" start="2026-04-18T03:05:39.773640" elapsed="3.652005"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:43.426942" level="INFO">${prefix_count} = 0</msg>
<var>${prefix_count}</var>
<arg>len(re.findall('"prefix":"', '''${topology}'''))</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:43.426021" elapsed="0.000951"/>
</kw>
<return>
<value>${prefix_count}</value>
<status status="PASS" start="2026-04-18T03:05:43.427023" elapsed="0.000031"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Get topology. If not fail, return number of prefixes in the topology.</doc>
<status status="PASS" start="2026-04-18T03:05:39.773049" elapsed="3.654166"/>
</kw>
<msg time="2026-04-18T03:05:43.427323" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:05:43.427383" level="INFO">${message} = 0</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:39.772481" elapsed="3.654929"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:43.427609" elapsed="0.029911"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:05:43.458816" elapsed="0.000040"/>
</return>
<status status="PASS" start="2026-04-18T03:05:43.458676" elapsed="0.000215"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:43.458648" elapsed="0.000270"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:43.459097" elapsed="0.000023"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with 0.</doc>
<status status="PASS" start="2026-04-18T03:05:43.458202" elapsed="0.000980"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:05:43.459227" elapsed="0.000027"/>
</return>
<msg time="2026-04-18T03:05:43.459386" level="INFO">${actual_count} = 0</msg>
<var>${actual_count}</var>
<arg>Get_Ipv4_Topology_Count</arg>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:05:39.771717" elapsed="3.687697"/>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<msg time="2026-04-18T03:05:43.459944" level="INFO">Argument types are:
&lt;class 'int'&gt;
&lt;class 'str'&gt;</msg>
<arg>${actual_count}</arg>
<arg>${expected_count}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="PASS" start="2026-04-18T03:05:43.459597" elapsed="0.000416"/>
</kw>
<arg>0</arg>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>Check that the count of prefixes matches the expected count. Fails if it does not. In either case, collect garbage.</doc>
<status status="PASS" start="2026-04-18T03:05:39.771115" elapsed="3.688959"/>
</kw>
<doc>Example_Ipv4_Topology has to give status 200 with zero prefixes.</doc>
<status status="PASS" start="2026-04-18T03:05:39.770722" elapsed="3.689408"/>
</kw>
<arg>120s</arg>
<arg>1s</arg>
<arg>PrefixCounting.Check_Ipv4_Topology_Is_Empty</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-04-18T03:05:39.770055" elapsed="3.690117"/>
</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">
<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-04-18T03:05:43.460813" elapsed="0.000258"/>
</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-04-18T03:05:43.461923" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:43.461519" elapsed="0.000467"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:43.461500" 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-04-18T03:05:43.462197" elapsed="0.000319"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:43.467718" level="INFO">${test_skipped} = False</msg>
<var>${test_skipped}</var>
<arg>len(re.findall('SKIPPED', """${TEST_MESSAGE}""")) &gt; 0</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:43.467207" elapsed="0.000539"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-04-18T03:05:43.467966" elapsed="0.000029"/>
</return>
<status status="PASS" start="2026-04-18T03:05:43.467822" elapsed="0.000202"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:43.467803" 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-04-18T03:05:43.468201" elapsed="0.000022"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<var>${reference}</var>
<arg>${SUITE_NAME}_${TEST_NAME}</arg>
<arg>[ /\.-]</arg>
<arg>_</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:43.468378" elapsed="0.000020"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:43.468570" elapsed="0.000021"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${msg}</var>
<arg>... click for list of related bugs or create a new one if needed (with the${newline}"${reference}"${newline}reference somewhere inside)</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:43.468745" elapsed="0.000020"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${bugs}</var>
<arg>"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=${reference}&amp;order=bug_status"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:43.468917" elapsed="0.000020"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:43.469087" elapsed="0.000020"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:43.469259" elapsed="0.000039"/>
</kw>
<doc>Report that a test failed and point to linked Bugzilla bug(s).
Linked bugs must contain the ${reference} inside comments (workaround
becasue of currently missing suitable field for external references and
not correctly working the CONTENT MATCHES filter).
Not FAILED (incl. SKIPPED) test are not reported.
This keyword must be used in the [Teardown] setting of the affected test
or as the first line of the test if FastFail module is not being
used. It reports the URL of the bug on console and also puts it
into the Robot log file.</doc>
<status status="PASS" start="2026-04-18T03:05:43.466889" elapsed="0.002499"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:43.461305" elapsed="0.008270"/>
</kw>
<doc>Test case teardown. Show linked bugs and start fast failing in case of failure.</doc>
<status status="PASS" start="2026-04-18T03:05:43.460479" elapsed="0.009159"/>
</kw>
<doc>Wait for example-ipv4-topology to come up and empty. Give large timeout for case when BGP boots slower than restconf.</doc>
<tag>critical</tag>
<status status="PASS" start="2026-04-18T03:05:39.552603" elapsed="3.917092"/>
</test>
<test id="s1-s1-t2" name="Reconfigure_ODL_To_Accept_Connection" line="94">
<kw name="Setup_Test_With_Logging_And_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Fail_This_Fast_On_Previous_Error" owner="FailFast">
<if>
<branch type="IF" condition="'''${SuiteFastFail}'''=='True'">
<kw name="Fail" owner="BuiltIn">
<arg>SKIPPED due to a failure in a previous fundamental test case.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:43.473926" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:43.473694" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:43.473674" elapsed="0.000333"/>
</if>
<doc>Mark (immediately) this test case as failed when fast-fail is enabled in suite.</doc>
<status status="PASS" start="2026-04-18T03:05:43.473483" elapsed="0.000571"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:43.475129" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:43.475021" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:43.475003" 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-04-18T03:05:43.480111" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:43.480004" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:43.479986" elapsed="0.000195"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-18T03:05:43.481204" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-18T03:05:43.480813" elapsed="0.000419"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-18T03:05:43.481718" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-18T03:05:43.481398" elapsed="0.000346"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-18T03:05:43.481788" elapsed="0.000031"/>
</return>
<msg time="2026-04-18T03:05:43.481945" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-18T03:05:43.480413" 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-04-18T03:05:43.487478" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:43.487369" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:43.487350" elapsed="0.000215"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:43.488776" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:43.488669" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:43.488650" elapsed="0.000195"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-18T03:05:43.489373" level="INFO">${karaf_connection_index} = 4</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-18T03:05:43.489036" elapsed="0.000364"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-18T03:05:43.489817" level="INFO">${current_connection_index} = 7</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:05:43.489592" elapsed="0.000251"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-18T03:05:43.544989" 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 "b "g "p "c "e "p "- "b "g "p "- "i "n "g "e "s "t "[78C- "[A[78Cm</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-18T03:05:43.490372" elapsed="0.054865"/>
</kw>
<msg time="2026-04-18T03:05:43.545522" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-18T03:05:43.545616" 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 "b "g "p "c "e "p "- "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:43.490008" elapsed="0.055654"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-18T03:05:43.586465" level="INFO">"i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "R "e "c "o "n "f "i "g "u "r "e "_ "O "D "L "_ "T "o "_ "A "c "c "e "p "t "_ "C "o "n "n "e "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-04-18T03:05:43.546738" elapsed="0.040022"/>
</kw>
<msg time="2026-04-18T03:05:43.587002" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-18T03:05:43.587052" level="INFO">${message_wait} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "R "e "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-04-18T03:05:43.545951" elapsed="0.041140"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:43.587632" elapsed="0.000114"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:43.587207" elapsed="0.000585"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:43.587172" elapsed="0.000654"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:43.588453" level="INFO"> "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "R "e "c "o "n "f "i "g "u "r "e "_ "O "D "L "_ "T "o "_ "A "c "c "e "p "t "_ "C "o "n "n "e "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-04-18T03:05:43.588033" 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-04-18T03:05:43.588897" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:43.588650" elapsed="0.000316"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:43.588628" elapsed="0.000363"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-18T03:05:43.589031" elapsed="0.000042"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:05:43.592375" elapsed="0.000204"/>
</kw>
<msg time="2026-04-18T03:05:43.592669" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:43.590938" elapsed="0.001891"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:43.593182" elapsed="0.000101"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:43.593599" elapsed="0.000079"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-18T03:05:43.590099" elapsed="0.003721"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-18T03:05:43.589399" elapsed="0.004517"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-18T03:05:43.488335" elapsed="0.105709"/>
</kw>
<msg time="2026-04-18T03:05:43.594163" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:05:43.594216" level="INFO">${message} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "R "e "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-04-18T03:05:43.487729" elapsed="0.106537"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:05:43.594510" elapsed="0.000069"/>
</return>
<status status="PASS" start="2026-04-18T03:05:43.594359" elapsed="0.000265"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:43.594337" elapsed="0.000313"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:43.595179" elapsed="0.000034"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:43.595631" elapsed="0.000027"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:05:43.595708" elapsed="0.000018"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-18T03:05:43.487030" elapsed="0.108794"/>
</kw>
<msg time="2026-04-18T03:05:43.595923" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:05:43.595981" level="INFO">${output} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "R "e "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-04-18T03:05:43.482395" elapsed="0.113638"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:43.596401" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:43.596131" elapsed="0.000326"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:43.596111" elapsed="0.000374"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-18T03:05:43.482243" elapsed="0.114277"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-18T03:05:43.482032" elapsed="0.114556"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-18T03:05:43.479644" elapsed="0.117007"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-18T03:05:43.474728" elapsed="0.121983"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:43.474248" elapsed="0.122512"/>
</kw>
<doc>Test case setup which skips on previous failure. If not, logs test case name to Karaf log.
Recommended to be used as the default test case setup.</doc>
<status status="PASS" start="2026-04-18T03:05:43.471039" elapsed="0.125778"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-18T03:05:43.598147" level="INFO">&amp;{mapping} = { DEVICE_NAME=controller-config | BGP_NAME=example-bgp-peer | IP=10.30.170.251 | HOLDTIME=180 | PEER_PORT=17900 | INITIATE=false | BGP_RIB=example-bgp-rib | PASSIVE_MODE=true | BGP_RIB_OPENCONFIG=exam...</msg>
<var>&amp;{mapping}</var>
<arg>DEVICE_NAME=${DEVICE_NAME}</arg>
<arg>BGP_NAME=${BGP_PEER_NAME}</arg>
<arg>IP=${TOOLS_SYSTEM_IP}</arg>
<arg>HOLDTIME=${HOLDTIME_CHANGE_COUNT_SINGLE}</arg>
<arg>PEER_PORT=${BGP_TOOL_PORT}</arg>
<arg>INITIATE=false</arg>
<arg>BGP_RIB=${RIB_INSTANCE}</arg>
<arg>PASSIVE_MODE=true</arg>
<arg>BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}</arg>
<arg>RIB_INSTANCE_NAME=${RIB_INSTANCE}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-18T03:05:43.597101" elapsed="0.001085"/>
</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-04-18T03:05:43.635359" level="INFO">${file_path_stream} = /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:05:43.634912" elapsed="0.000478"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-18T03:05:43.636341" level="FAIL">File '/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/variables/bgpuser/bgp_peer.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-18T03:05:43.635996" elapsed="0.000445">File '/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/variables/bgpuser/bgp_peer.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-18T03:05:43.636558" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-18T03:05:43.635604" elapsed="0.000984"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-18T03:05:43.637329" level="INFO">${file_path} = /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-18T03:05:43.636807" elapsed="0.000561"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-18T03:05:43.637841" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/variables/bgpuser/bgp_peer/location.uri"&gt;/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/variables/bgpuser/bgp_peer/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-18T03:05:43.638083" level="INFO">${template} = rests/data/openconfig-network-instance:network-instances/network-instance=global-bgp/openconfig-network-instance:protocols/protocol=openconfig-policy-types%3ABGP,$BGP_RIB_OPENCONFIG/bgp-openconfig-ext...</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-18T03:05:43.637629" elapsed="0.000494"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:43.638840" level="INFO">rests/data/openconfig-network-instance:network-instances/network-instance=global-bgp/openconfig-network-instance:protocols/protocol=openconfig-policy-types%3ABGP,$BGP_RIB_OPENCONFIG/bgp-openconfig-extensions:bgp/neighbors/neighbor=$IP
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:43.638381" elapsed="0.000538"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:43.640182" level="INFO">mapping: {'DEVICE_NAME': 'controller-config', 'BGP_NAME': 'example-bgp-peer', 'IP': '10.30.170.251', 'HOLDTIME': '180', 'PEER_PORT': '17900', 'INITIATE': 'false', 'BGP_RIB': 'example-bgp-rib', 'PASSIVE_MODE': 'true', 'BGP_RIB_OPENCONFIG': 'example-bgp-rib', 'RIB_INSTANCE_NAME': 'example-bgp-rib'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:43.639899" elapsed="0.000334"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-18T03:05:43.640710" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-18T03:05:43.640405" elapsed="0.000331"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-18T03:05:43.641449" level="INFO">${value} = controller-config</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-18T03:05:43.641140" elapsed="0.000335"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-18T03:05:43.642331" level="INFO">${encoded} = controller-config</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-18T03:05:43.642040" elapsed="0.000317"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-18T03:05:43.642410" elapsed="0.000038"/>
</return>
<msg time="2026-04-18T03:05:43.642602" level="INFO">${encoded_value} = controller-config</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-04-18T03:05:43.641691" elapsed="0.000937"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-18T03:05:43.642813" elapsed="0.000251"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">controller-config</var>
<status status="PASS" start="2026-04-18T03:05:43.640993" elapsed="0.002123"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-18T03:05:43.643718" level="INFO">${value} = example-bgp-peer</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-18T03:05:43.643386" elapsed="0.000358"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-18T03:05:43.644483" level="INFO">${encoded} = example-bgp-peer</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-18T03:05:43.644266" elapsed="0.000244"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-18T03:05:43.644579" elapsed="0.000030"/>
</return>
<msg time="2026-04-18T03:05:43.644827" level="INFO">${encoded_value} = example-bgp-peer</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-04-18T03:05:43.643941" elapsed="0.000913"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-18T03:05:43.645013" elapsed="0.000253"/>
</kw>
<var name="${key}">BGP_NAME</var>
<var name="${value}">example-bgp-peer</var>
<status status="PASS" start="2026-04-18T03:05:43.643242" elapsed="0.002067"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-18T03:05:43.646108" level="INFO">${value} = 10.30.170.251</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-18T03:05:43.645600" elapsed="0.000535"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-18T03:05:43.646998" level="INFO">${encoded} = 10.30.170.251</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-18T03:05:43.646691" elapsed="0.000338"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-18T03:05:43.647094" elapsed="0.000036"/>
</return>
<msg time="2026-04-18T03:05:43.647281" level="INFO">${encoded_value} = 10.30.170.251</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-04-18T03:05:43.646343" elapsed="0.000967"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-18T03:05:43.647472" elapsed="0.000249"/>
</kw>
<var name="${key}">IP</var>
<var name="${value}">10.30.170.251</var>
<status status="PASS" start="2026-04-18T03:05:43.645426" elapsed="0.002337"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-18T03:05:43.648332" level="INFO">${value} = 180</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-18T03:05:43.648028" elapsed="0.000330"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-18T03:05:43.649129" level="INFO">${encoded} = 180</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-18T03:05:43.648891" elapsed="0.000265"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-18T03:05:43.649206" elapsed="0.000029"/>
</return>
<msg time="2026-04-18T03:05:43.649358" level="INFO">${encoded_value} = 180</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-04-18T03:05:43.648568" elapsed="0.000814"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-18T03:05:43.649553" elapsed="0.000227"/>
</kw>
<var name="${key}">HOLDTIME</var>
<var name="${value}">180</var>
<status status="PASS" start="2026-04-18T03:05:43.647884" elapsed="0.001937"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-18T03:05:43.650396" level="INFO">${value} = 17900</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-18T03:05:43.650090" elapsed="0.000332"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-18T03:05:43.651254" level="INFO">${encoded} = 17900</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-18T03:05:43.651028" elapsed="0.000253"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-18T03:05:43.651330" elapsed="0.000030"/>
</return>
<msg time="2026-04-18T03:05:43.651479" level="INFO">${encoded_value} = 17900</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-04-18T03:05:43.650634" 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-04-18T03:05:43.651678" elapsed="0.000238"/>
</kw>
<var name="${key}">PEER_PORT</var>
<var name="${value}">17900</var>
<status status="PASS" start="2026-04-18T03:05:43.649932" elapsed="0.002027"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-18T03:05:43.652516" level="INFO">${value} = false</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-18T03:05:43.652213" elapsed="0.000347"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-18T03:05:43.653318" level="INFO">${encoded} = false</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-18T03:05:43.653106" elapsed="0.000239"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-18T03:05:43.653395" elapsed="0.000034"/>
</return>
<msg time="2026-04-18T03:05:43.653568" level="INFO">${encoded_value} = false</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-04-18T03:05:43.652775" elapsed="0.000820"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-18T03:05:43.653773" elapsed="0.000227"/>
</kw>
<var name="${key}">INITIATE</var>
<var name="${value}">false</var>
<status status="PASS" start="2026-04-18T03:05:43.652073" elapsed="0.002116"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-18T03:05:43.654775" level="INFO">${value} = example-bgp-rib</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-18T03:05:43.654441" elapsed="0.000407"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-18T03:05:43.655633" level="INFO">${encoded} = example-bgp-rib</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-18T03:05:43.655397" elapsed="0.000263"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-18T03:05:43.655711" elapsed="0.000044"/>
</return>
<msg time="2026-04-18T03:05:43.655885" level="INFO">${encoded_value} = example-bgp-rib</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-04-18T03:05:43.655057" elapsed="0.000897"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-18T03:05:43.656115" elapsed="0.000227"/>
</kw>
<var name="${key}">BGP_RIB</var>
<var name="${value}">example-bgp-rib</var>
<status status="PASS" start="2026-04-18T03:05:43.654303" elapsed="0.002087"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-18T03:05:43.656989" level="INFO">${value} = true</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-18T03:05:43.656664" elapsed="0.000351"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-18T03:05:43.657961" level="INFO">${encoded} = true</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-18T03:05:43.657741" elapsed="0.000246"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-18T03:05:43.658038" elapsed="0.000029"/>
</return>
<msg time="2026-04-18T03:05:43.658189" level="INFO">${encoded_value} = true</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-04-18T03:05:43.657211" elapsed="0.001002"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-18T03:05:43.658370" elapsed="0.000260"/>
</kw>
<var name="${key}">PASSIVE_MODE</var>
<var name="${value}">true</var>
<status status="PASS" start="2026-04-18T03:05:43.656504" elapsed="0.002168"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-18T03:05:43.659308" level="INFO">${value} = example-bgp-rib</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-18T03:05:43.658952" elapsed="0.000389"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-18T03:05:43.660221" level="INFO">${encoded} = example-bgp-rib</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-18T03:05:43.659904" elapsed="0.000343"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-18T03:05:43.660297" elapsed="0.000029"/>
</return>
<msg time="2026-04-18T03:05:43.660448" level="INFO">${encoded_value} = example-bgp-rib</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-04-18T03:05:43.659576" elapsed="0.000897"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-18T03:05:43.660647" elapsed="0.000253"/>
</kw>
<var name="${key}">BGP_RIB_OPENCONFIG</var>
<var name="${value}">example-bgp-rib</var>
<status status="PASS" start="2026-04-18T03:05:43.658790" elapsed="0.002153"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-18T03:05:43.661521" level="INFO">${value} = example-bgp-rib</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-18T03:05:43.661215" elapsed="0.000351"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-18T03:05:43.662313" level="INFO">${encoded} = example-bgp-rib</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-18T03:05:43.662082" elapsed="0.000257"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-18T03:05:43.662388" elapsed="0.000029"/>
</return>
<msg time="2026-04-18T03:05:43.662556" level="INFO">${encoded_value} = example-bgp-rib</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-04-18T03:05:43.661761" elapsed="0.000820"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-18T03:05:43.662743" elapsed="0.000254"/>
</kw>
<var name="${key}">RIB_INSTANCE_NAME</var>
<var name="${value}">example-bgp-rib</var>
<status status="PASS" start="2026-04-18T03:05:43.661057" elapsed="0.001981"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-18T03:05:43.640794" elapsed="0.022284"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-18T03:05:43.663139" elapsed="0.000032"/>
</return>
<msg time="2026-04-18T03:05:43.663324" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'controller-config', 'BGP_NAME': 'example-bgp-peer', 'IP': '10.30.170.251', 'HOLDTIME': '180', 'PEER_PORT': '17900', 'INITIATE': 'false', 'BGP_RIB': 'example-bgp-rib', 'PASSIVE_MODE': ...</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-18T03:05:43.639500" elapsed="0.023850"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:43.639031" elapsed="0.024352"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:43.663591" elapsed="0.000108"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:43.663410" elapsed="0.000327"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:43.638997" elapsed="0.024762"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:43.668209" level="INFO">${final_text} = rests/data/openconfig-network-instance:network-instances/network-instance=global-bgp/openconfig-network-instance:protocols/protocol=openconfig-policy-types%3ABGP,example-bgp-rib/bgp-openconfig-extensi...</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:43.663915" elapsed="0.004331"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-18T03:05:43.668339" elapsed="0.000057"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer/${file_name}.</doc>
<status status="PASS" start="2026-04-18T03:05:43.634189" elapsed="0.034334"/>
</kw>
<msg time="2026-04-18T03:05:43.668670" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:43.620501" elapsed="0.048228"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:43.682485" elapsed="0.000068"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:43.696127" elapsed="0.000065"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:43.710570" elapsed="0.000072"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:43.710946" elapsed="0.000026"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:43.711209" elapsed="0.000022"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:43.711731" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:43.711568" elapsed="0.000221"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:05:43.711547" elapsed="0.000269"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:43.711965" 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-04-18T03:05:43.712156" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:43.712327" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-18T03:05:43.711488" elapsed="0.000892"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-18T03:05:43.711321" elapsed="0.001088"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:43.712602" elapsed="0.000029"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-18T03:05:43.712708" elapsed="0.000026"/>
</return>
<msg time="2026-04-18T03:05:43.712917" level="INFO">${uri} = rests/data/openconfig-network-instance:network-instances/network-instance=global-bgp/openconfig-network-instance:protocols/protocol=openconfig-policy-types%3ABGP,example-bgp-rib/bgp-openconfig-extensi...</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from 1, by one  times.
Template variable ${j} is calculated as ${i} incremented by offset 0 ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-04-18T03:05:43.615814" elapsed="0.097133"/>
</kw>
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:43.741648" level="INFO">${file_path_stream} = /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.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-04-18T03:05:43.741221" elapsed="0.000461"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-18T03:05:43.742481" level="FAIL">File '/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/variables/bgpuser/bgp_peer.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-04-18T03:05:43.742207" elapsed="0.000381">File '/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/variables/bgpuser/bgp_peer.vanadium/data.xml' does not exist.</status>
</kw>
<msg time="2026-04-18T03:05:43.742763" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-18T03:05:43.741862" elapsed="0.000927"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-18T03:05:43.743460" level="INFO">${file_path} = /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer/data.xml</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-18T03:05:43.742962" elapsed="0.000527"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-18T03:05:43.743831" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/variables/bgpuser/bgp_peer/data.xml"&gt;/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/variables/bgpuser/bgp_peer/data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-18T03:05:43.744000" level="INFO">${template} = &lt;neighbor xmlns="urn:opendaylight:params:xml:ns:yang:bgp:openconfig-extensions"&gt;
    &lt;neighbor-address&gt;$IP&lt;/neighbor-address&gt;
    &lt;route-reflector&gt;
        &lt;config&gt;
            &lt;route-reflector-client...</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-18T03:05:43.743681" elapsed="0.000348"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:43.744451" level="INFO">&lt;neighbor xmlns="urn:opendaylight:params:xml:ns:yang:bgp:openconfig-extensions"&gt;
    &lt;neighbor-address&gt;$IP&lt;/neighbor-address&gt;
    &lt;route-reflector&gt;
        &lt;config&gt;
            &lt;route-reflector-client&gt;false&lt;/route-reflector-client&gt;
        &lt;/config&gt;
    &lt;/route-reflector&gt;
    &lt;timers&gt;
        &lt;config&gt;
            &lt;hold-time&gt;$HOLDTIME&lt;/hold-time&gt;
            &lt;connect-retry&gt;5&lt;/connect-retry&gt;
        &lt;/config&gt;
    &lt;/timers&gt;
    &lt;transport&gt;
        &lt;config&gt;
            &lt;remote-port&gt;$PEER_PORT&lt;/remote-port&gt;
            &lt;passive-mode&gt;$PASSIVE_MODE&lt;/passive-mode&gt;
        &lt;/config&gt;
    &lt;/transport&gt;
    &lt;config&gt;
        &lt;peer-type&gt;INTERNAL&lt;/peer-type&gt;
    &lt;/config&gt;
    &lt;afi-safis&gt;
        &lt;afi-safi&gt;
            &lt;afi-safi-name xmlns:x="http://openconfig.net/yang/bgp-types"&gt;x:IPV4-UNICAST&lt;/afi-safi-name&gt;
        &lt;/afi-safi&gt;
        &lt;afi-safi&gt;
            &lt;afi-safi-name xmlns:x="http://openconfig.net/yang/bgp-types"&gt;x:IPV6-UNICAST&lt;/afi-safi-name&gt;
        &lt;/afi-safi&gt;
        &lt;afi-safi&gt;
            &lt;afi-safi-name&gt;LINKSTATE&lt;/afi-safi-name&gt;
        &lt;/afi-safi&gt;
    &lt;/afi-safis&gt;
&lt;/neighbor&gt;
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:43.744199" 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-04-18T03:05:43.744942" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:43.744612" elapsed="0.000390"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:43.745490" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'controller-config', 'BGP_NAME': 'example-bgp-peer', 'IP': '10.30.170.251', 'HOLDTIME': '180', 'PEER_PORT': '17900', 'INITIATE': 'false', 'BGP_RIB': 'example-bgp-rib', 'PASSIVE_MODE': ...</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:05:43.745182" elapsed="0.000337"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:43.745029" elapsed="0.000547"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:43.744587" elapsed="0.001012"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:43.746594" level="INFO">${final_text} = &lt;neighbor xmlns="urn:opendaylight:params:xml:ns:yang:bgp:openconfig-extensions"&gt;
    &lt;neighbor-address&gt;10.30.170.251&lt;/neighbor-address&gt;
    &lt;route-reflector&gt;
        &lt;config&gt;
            &lt;route-reflec...</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:43.745753" elapsed="0.000872"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-18T03:05:43.746679" 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/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer/${file_name}.</doc>
<status status="PASS" start="2026-04-18T03:05:43.740555" elapsed="0.006268"/>
</kw>
<msg time="2026-04-18T03:05:43.746883" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:43.727015" elapsed="0.019917"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:43.759868" elapsed="0.000037"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:43.772857" elapsed="0.000046"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:43.785325" elapsed="0.000029"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:43.785572" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:43.785763" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:43.786185" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:43.786028" elapsed="0.000213"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:05:43.786009" elapsed="0.000259"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:43.786416" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:43.786604" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:43.786776" elapsed="0.000031"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-18T03:05:43.785969" elapsed="0.000871"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-18T03:05:43.785847" elapsed="0.001022"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:43.787022" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-18T03:05:43.787100" elapsed="0.000018"/>
</return>
<msg time="2026-04-18T03:05:43.787272" level="INFO">${data} = &lt;neighbor xmlns="urn:opendaylight:params:xml:ns:yang:bgp:openconfig-extensions"&gt;
    &lt;neighbor-address&gt;10.30.170.251&lt;/neighbor-address&gt;
    &lt;route-reflector&gt;
        &lt;config&gt;
            &lt;route-reflec...</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-04-18T03:05:43.723767" elapsed="0.063537"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-18T03:05:43.788782" level="FAIL">File '/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/variables/bgpuser/bgp_peer/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-18T03:05:43.788456" elapsed="0.000410">File '/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/variables/bgpuser/bgp_peer/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-18T03:05:43.788962" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-18T03:05:43.788061" elapsed="0.000926"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:43.789328" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:43.789058" elapsed="0.000326"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:43.789904" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:05:43.789603" elapsed="0.000328"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:43.789409" elapsed="0.000557"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:43.789039" elapsed="0.000949"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-18T03:05:43.792370" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-18T03:05:43.790145" elapsed="0.002252"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-18T03:05:43.792449" elapsed="0.000031"/>
</return>
<msg time="2026-04-18T03:05:43.792623" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-18T03:05:43.787701" elapsed="0.004947"/>
</kw>
<kw name="Put_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:43.794170" level="INFO">rests/data/openconfig-network-instance:network-instances/network-instance=global-bgp/openconfig-network-instance:protocols/protocol=openconfig-policy-types%3ABGP,example-bgp-rib/bgp-openconfig-extensions:bgp/neighbors/neighbor=10.30.170.251</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:43.793891" elapsed="0.000387"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:43.794724" level="INFO">&lt;neighbor xmlns="urn:opendaylight:params:xml:ns:yang:bgp:openconfig-extensions"&gt;
    &lt;neighbor-address&gt;10.30.170.251&lt;/neighbor-address&gt;
    &lt;route-reflector&gt;
        &lt;config&gt;
            &lt;route-reflector-client&gt;false&lt;/route-reflector-client&gt;
        &lt;/config&gt;
    &lt;/route-reflector&gt;
    &lt;timers&gt;
        &lt;config&gt;
            &lt;hold-time&gt;180&lt;/hold-time&gt;
            &lt;connect-retry&gt;5&lt;/connect-retry&gt;
        &lt;/config&gt;
    &lt;/timers&gt;
    &lt;transport&gt;
        &lt;config&gt;
            &lt;remote-port&gt;17900&lt;/remote-port&gt;
            &lt;passive-mode&gt;true&lt;/passive-mode&gt;
        &lt;/config&gt;
    &lt;/transport&gt;
    &lt;config&gt;
        &lt;peer-type&gt;INTERNAL&lt;/peer-type&gt;
    &lt;/config&gt;
    &lt;afi-safis&gt;
        &lt;afi-safi&gt;
            &lt;afi-safi-name xmlns:x="http://openconfig.net/yang/bgp-types"&gt;x:IPV4-UNICAST&lt;/afi-safi-name&gt;
        &lt;/afi-safi&gt;
        &lt;afi-safi&gt;
            &lt;afi-safi-name xmlns:x="http://openconfig.net/yang/bgp-types"&gt;x:IPV6-UNICAST&lt;/afi-safi-name&gt;
        &lt;/afi-safi&gt;
        &lt;afi-safi&gt;
            &lt;afi-safi-name&gt;LINKSTATE&lt;/afi-safi-name&gt;
        &lt;/afi-safi&gt;
    &lt;/afi-safis&gt;
&lt;/neighbor&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:43.794453" elapsed="0.000331"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:43.795229" level="INFO">{'Content-Type': 'application/xml'}</msg>
<arg>${content_type}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:43.794961" elapsed="0.000312"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:43.795745" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:43.795465" elapsed="0.000333"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-18T03:05:43.796675" level="INFO">${accumulator} = {'Content-Type': 'application/xml'}</msg>
<var>${accumulator}</var>
<arg>${first}</arg>
<doc>Returns a copy of the given dictionary.</doc>
<status status="PASS" start="2026-04-18T03:05:43.796434" elapsed="0.000267"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-18T03:05:43.797064" level="INFO">${items_to_add} = ['Accept', 'application/xml']</msg>
<var>${items_to_add}</var>
<arg>${second}</arg>
<doc>Returns items of the given ``dictionary`` as a list.</doc>
<status status="PASS" start="2026-04-18T03:05:43.796867" elapsed="0.000224"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${accumulator}</arg>
<arg>@{items_to_add}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-18T03:05:43.797255" elapsed="0.000225"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:43.797944" level="INFO">{'Content-Type': 'application/xml', 'Accept': 'application/xml'}</msg>
<arg>${accumulator}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:43.797681" elapsed="0.000308"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-18T03:05:43.798032" elapsed="0.000029"/>
</return>
<msg time="2026-04-18T03:05:43.798211" level="INFO">${headers} = {'Content-Type': 'application/xml', 'Accept': 'application/xml'}</msg>
<var>${headers}</var>
<arg>first=${content_type}</arg>
<arg>second=${accept}</arg>
<doc>Take two dicts, join them, return result. Second argument values take precedence.</doc>
<status status="PASS" start="2026-04-18T03:05:43.796028" elapsed="0.002209"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="PUT On Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:05:43.834160" level="INFO">PUT Request : url=http://10.30.170.68:8181/rests/data/openconfig-network-instance:network-instances/network-instance=global-bgp/openconfig-network-instance:protocols/protocol=openconfig-policy-types%3ABGP,example-bgp-rib/bgp-openconfig-extensions:bgp/neighbors/neighbor=10.30.170.251 
 path_url=/rests/data/openconfig-network-instance:network-instances/network-instance=global-bgp/openconfig-network-instance:protocols/protocol=openconfig-policy-types%3ABGP,example-bgp-rib/bgp-openconfig-extensions:bgp/neighbors/neighbor=10.30.170.251 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Content-Length': '1079', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;neighbor xmlns="urn:opendaylight:params:xml:ns:yang:bgp:openconfig-extensions"&gt;
    &lt;neighbor-address&gt;10.30.170.251&lt;/neighbor-address&gt;
    &lt;route-reflector&gt;
        &lt;config&gt;
            &lt;route-reflector-client&gt;false&lt;/route-reflector-client&gt;
        &lt;/config&gt;
    &lt;/route-reflector&gt;
    &lt;timers&gt;
        &lt;config&gt;
            &lt;hold-time&gt;180&lt;/hold-time&gt;
            &lt;connect-retry&gt;5&lt;/connect-retry&gt;
        &lt;/config&gt;
    &lt;/timers&gt;
    &lt;transport&gt;
        &lt;config&gt;
            &lt;remote-port&gt;17900&lt;/remote-port&gt;
            &lt;passive-mode&gt;true&lt;/passive-mode&gt;
        &lt;/config&gt;
    &lt;/transport&gt;
    &lt;config&gt;
        &lt;peer-type&gt;INTERNAL&lt;/peer-type&gt;
    &lt;/config&gt;
    &lt;afi-safis&gt;
        &lt;afi-safi&gt;
            &lt;afi-safi-name xmlns:x="http://openconfig.net/yang/bgp-types"&gt;x:IPV4-UNICAST&lt;/afi-safi-name&gt;
        &lt;/afi-safi&gt;
        &lt;afi-safi&gt;
            &lt;afi-safi-name xmlns:x="http://openconfig.net/yang/bgp-types"&gt;x:IPV6-UNICAST&lt;/afi-safi-name&gt;
        &lt;/afi-safi&gt;
        &lt;afi-safi&gt;
            &lt;afi-safi-name&gt;LINKSTATE&lt;/afi-safi-name&gt;
        &lt;/afi-safi&gt;
    &lt;/afi-safis&gt;
&lt;/neighbor&gt; 
 </msg>
<msg time="2026-04-18T03:05:43.834361" level="INFO">PUT Response : url=http://10.30.170.68:8181/rests/data/openconfig-network-instance:network-instances/network-instance=global-bgp/openconfig-network-instance:protocols/protocol=openconfig-policy-types%3ABGP,example-bgp-rib/bgp-openconfig-extensions:bgp/neighbors/neighbor=10.30.170.251 
 status=201, reason=Created 
 headers={'Set-Cookie': 'JSESSIONID=node0kakfil5cul8yhuuib3hrea271.node0; Path=/rests; HttpOnly, rememberMe=deleteMe; Path=/rests; Max-Age=0; Expires=Fri, 17-Apr-2026 03:05:43 GMT; SameSite=lax', 'Expires': 'Thu, 01 Jan 1970 00:00:00 GMT', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-04-18T03:05:43.834752" level="INFO">${response} = &lt;Response [201]&gt;</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="PASS" start="2026-04-18T03:05:43.800804" elapsed="0.034020"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:43.798309" elapsed="0.036641"/>
</branch>
<branch type="ELSE">
<kw name="PUT On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a PUT request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:43.835507" elapsed="0.000166"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:43.835022" elapsed="0.000769"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:43.798291" elapsed="0.037554"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:43.843246" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:43.838708" elapsed="0.004605"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:43.838074" elapsed="0.005292"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:43.838025" elapsed="0.005407"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:43.847342" level="INFO">201</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:43.843954" elapsed="0.003463"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:43.843576" elapsed="0.003890"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:43.843505" elapsed="0.003996"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:43.848446" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:43.847853" elapsed="0.000631"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:43.848964" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:43.848626" elapsed="0.000402"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:43.849553" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:05:43.849222" elapsed="0.000359"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:43.849053" elapsed="0.000565"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:43.848593" elapsed="0.001048"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:43.850184" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:43.849806" elapsed="0.000405"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:43.850520" elapsed="0.000041"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:43.850282" elapsed="0.000323"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:43.851191" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:05:43.850844" elapsed="0.000374"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:43.850636" elapsed="0.000619"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:43.850263" elapsed="0.001014"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:43.851440" elapsed="0.000518"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-18T03:05:43.852624" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:43.852150" elapsed="0.000510"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-18T03:05:43.852866" elapsed="0.002577"/>
</kw>
<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="PASS" start="2026-04-18T03:05:43.837068" elapsed="0.018455"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-18T03:05:43.855779" elapsed="0.000042"/>
</return>
<status status="PASS" start="2026-04-18T03:05:43.855652" elapsed="0.000207"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:43.855592" elapsed="0.000300"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:43.856056" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-18T03:05:43.856123" elapsed="0.000015"/>
</return>
<msg time="2026-04-18T03:05:43.859166" level="INFO">${response_text} = </msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>content_type=${content_type}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>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="PASS" start="2026-04-18T03:05:43.792985" elapsed="0.066220"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-18T03:05:43.859297" elapsed="0.000038"/>
</return>
<msg time="2026-04-18T03:05:43.859513" level="INFO">${response_text} = </msg>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>extension=xml</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>content_type=${HEADERS_XML}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>endline=${\n}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>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="PASS" start="2026-04-18T03:05:43.603596" elapsed="0.255998"/>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=response</arg>
<arg>mapping=${mapping}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:43.860182" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:43.859792" elapsed="0.000490"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:43.859767" elapsed="0.000615"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-18T03:05:43.860434" elapsed="0.000038"/>
</return>
<arg>${BGP_VARIABLES_FOLDER}${/}bgp_peer</arg>
<arg>mapping=${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="PASS" start="2026-04-18T03:05:43.598623" elapsed="0.262027"/>
</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">
<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-04-18T03:05:43.861574" elapsed="0.000355"/>
</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-04-18T03:05:43.863218" elapsed="0.000038"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:43.862625" elapsed="0.000684"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:43.862591" elapsed="0.000752"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>'${SetupUtils__Known_Bug_ID}' != ''</arg>
<arg>Set_Known_Bug_Id</arg>
<arg>${EMPTY}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:43.863594" elapsed="0.000544"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:43.870324" level="INFO">${test_skipped} = False</msg>
<var>${test_skipped}</var>
<arg>len(re.findall('SKIPPED', """${TEST_MESSAGE}""")) &gt; 0</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:43.869801" elapsed="0.000558"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-04-18T03:05:43.870662" elapsed="0.000042"/>
</return>
<status status="PASS" start="2026-04-18T03:05:43.870451" elapsed="0.000292"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:43.870428" elapsed="0.000349"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:43.870956" elapsed="0.000022"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<var>${reference}</var>
<arg>${SUITE_NAME}_${TEST_NAME}</arg>
<arg>[ /\.-]</arg>
<arg>_</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:43.871142" elapsed="0.000028"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:43.871363" elapsed="0.000028"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${msg}</var>
<arg>... click for list of related bugs or create a new one if needed (with the${newline}"${reference}"${newline}reference somewhere inside)</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:43.871607" elapsed="0.000028"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${bugs}</var>
<arg>"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=${reference}&amp;order=bug_status"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:43.871883" elapsed="0.000026"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:43.872245" elapsed="0.000021"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:43.872459" elapsed="0.000027"/>
</kw>
<doc>Report that a test failed and point to linked Bugzilla bug(s).
Linked bugs must contain the ${reference} inside comments (workaround
becasue of currently missing suitable field for external references and
not correctly working the CONTENT MATCHES filter).
Not FAILED (incl. SKIPPED) test are not reported.
This keyword must be used in the [Teardown] setting of the affected test
or as the first line of the test if FastFail module is not being
used. It reports the URL of the bug on console and also puts it
into the Robot log file.</doc>
<status status="PASS" start="2026-04-18T03:05:43.869404" elapsed="0.003194"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:43.862288" elapsed="0.010377"/>
</kw>
<doc>Test case teardown. Show linked bugs and start fast failing in case of failure.</doc>
<status status="PASS" start="2026-04-18T03:05:43.861083" elapsed="0.011637"/>
</kw>
<doc>Configure BGP peer module with initiate-connection set to false.</doc>
<status status="PASS" start="2026-04-18T03:05:43.470277" elapsed="0.402503"/>
</test>
<test id="s1-s1-t3" name="Reconfigure_Data_Change_Counter" line="109">
<kw name="Setup_Test_With_Logging_And_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Fail_This_Fast_On_Previous_Error" owner="FailFast">
<if>
<branch type="IF" condition="'''${SuiteFastFail}'''=='True'">
<kw name="Fail" owner="BuiltIn">
<arg>SKIPPED due to a failure in a previous fundamental test case.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:43.877227" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:43.876978" elapsed="0.000323"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:43.876956" elapsed="0.000382"/>
</if>
<doc>Mark (immediately) this test case as failed when fast-fail is enabled in suite.</doc>
<status status="PASS" start="2026-04-18T03:05:43.876763" elapsed="0.000635"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:43.878770" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:43.878627" elapsed="0.000207"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:43.878602" elapsed="0.000263"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:43.884714" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:43.884575" elapsed="0.000201"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:43.884546" elapsed="0.000256"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-18T03:05:43.885980" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-18T03:05:43.885489" elapsed="0.000522"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-18T03:05:43.886629" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-18T03:05:43.886276" elapsed="0.000382"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-18T03:05:43.886704" elapsed="0.000036"/>
</return>
<msg time="2026-04-18T03:05:43.886870" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-18T03:05:43.885087" elapsed="0.001808"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:43.893204" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:43.893066" elapsed="0.000198"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:43.893040" 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-04-18T03:05:43.894746" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:43.894617" elapsed="0.000178"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:43.894598" elapsed="0.000220"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-18T03:05:43.895318" level="INFO">${karaf_connection_index} = 4</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-18T03:05:43.894972" elapsed="0.000375"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-18T03:05:43.895835" level="INFO">${current_connection_index} = 7</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:05:43.895516" elapsed="0.000348"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-18T03:05:43.939987" 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 "b "g "p "c "e "p "- "b "g "p "- "i "n "g "e "s "t "[78C- "[A[78Cm</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-18T03:05:43.896397" elapsed="0.043832"/>
</kw>
<msg time="2026-04-18T03:05:43.940482" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-18T03:05:43.940560" 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 "b "g "p "c "e "p "- "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:43.896032" elapsed="0.044567"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-18T03:05:43.976023" level="INFO">"i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "R "e "c "o "n "f "i "g "u "r "e "_ "D "a "t "a "_ "C "h "a "n "g "e "_ "C "o "u "n "t "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-18T03:05:43.941349" elapsed="0.034971"/>
</kw>
<msg time="2026-04-18T03:05:43.976570" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-18T03:05:43.976620" level="INFO">${message_wait} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "R "e "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-04-18T03:05:43.940882" elapsed="0.035778"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:43.977103" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:43.976774" elapsed="0.000389"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:43.976740" elapsed="0.000450"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:43.977757" level="INFO"> "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "R "e "c "o "n "f "i "g "u "r "e "_ "D "a "t "a "_ "C "h "a "n "g "e "_ "C "o "u "n "t "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:43.977346" 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-04-18T03:05:43.978128" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:43.977903" elapsed="0.000281"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:43.977884" elapsed="0.000323"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-18T03:05:43.978245" elapsed="0.000041"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:05:43.981283" elapsed="0.000182"/>
</kw>
<msg time="2026-04-18T03:05:43.981556" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:43.980008" elapsed="0.001687"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:43.982020" elapsed="0.001543"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:43.983886" elapsed="0.000077"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-18T03:05:43.979328" elapsed="0.004860"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-18T03:05:43.978593" elapsed="0.005672"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-18T03:05:43.894265" elapsed="0.090106"/>
</kw>
<msg time="2026-04-18T03:05:43.984466" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:05:43.984509" level="INFO">${message} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "R "e "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-04-18T03:05:43.893496" elapsed="0.091070"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:05:43.984764" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-18T03:05:43.984650" elapsed="0.000177"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:43.984628" elapsed="0.000224"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:43.985278" elapsed="0.000027"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:43.985653" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:05:43.985728" elapsed="0.000016"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-18T03:05:43.892582" elapsed="0.093279"/>
</kw>
<msg time="2026-04-18T03:05:43.985975" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:05:43.986020" level="INFO">${output} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "R "e "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-04-18T03:05:43.887339" elapsed="0.098717"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:43.986395" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:43.986134" elapsed="0.000317"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:43.986115" elapsed="0.000360"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-18T03:05:43.887186" elapsed="0.099312"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-18T03:05:43.886970" elapsed="0.099580"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-18T03:05:43.884167" elapsed="0.102442"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-18T03:05:43.878241" elapsed="0.108421"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:43.877624" elapsed="0.109081"/>
</kw>
<doc>Test case setup which skips on previous failure. If not, logs test case name to Karaf log.
Recommended to be used as the default test case setup.</doc>
<status status="PASS" start="2026-04-18T03:05:43.874017" elapsed="0.112738"/>
</kw>
<kw name="Reconfigure_Topology_Name" owner="ChangeCounter">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-18T03:05:43.992243" level="INFO">&amp;{mapping} = { DEVICE_NAME=controller-config | TOPOLOGY_NAME=example-ipv4-topology }</msg>
<var>&amp;{mapping}</var>
<arg>DEVICE_NAME=${DEVICE_NAME}</arg>
<arg>TOPOLOGY_NAME=${topology_name}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-18T03:05:43.991672" elapsed="0.000602"/>
</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-04-18T03:05:44.030831" level="INFO">${file_path_stream} = /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/../variables/bgpuser/change_counter.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:05:44.030321" elapsed="0.000548"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-18T03:05:44.031802" level="FAIL">File '/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/variables/bgpuser/change_counter.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-18T03:05:44.031451" elapsed="0.000462">File '/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/variables/bgpuser/change_counter.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-18T03:05:44.032041" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-18T03:05:44.031056" elapsed="0.001020"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-18T03:05:44.032782" level="INFO">${file_path} = /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/../variables/bgpuser/change_counter/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-18T03:05:44.032322" elapsed="0.000491"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-18T03:05:44.033272" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/variables/bgpuser/change_counter/location.uri"&gt;/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/variables/bgpuser/change_counter/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-18T03:05:44.033452" level="INFO">${template} = rests/data/odl-data-change-counter-config:data-change-counter-config=data-change-counter
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-18T03:05:44.033108" elapsed="0.000373"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:44.033974" level="INFO">rests/data/odl-data-change-counter-config:data-change-counter-config=data-change-counter
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:44.033686" elapsed="0.000350"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:44.035506" level="INFO">mapping: {'DEVICE_NAME': 'controller-config', 'TOPOLOGY_NAME': 'example-ipv4-topology'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:44.034957" elapsed="0.000636"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-18T03:05:44.036132" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-18T03:05:44.035807" elapsed="0.000360"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-18T03:05:44.036966" level="INFO">${value} = controller-config</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-18T03:05:44.036628" elapsed="0.000365"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-18T03:05:44.038096" level="INFO">${encoded} = controller-config</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-18T03:05:44.037588" elapsed="0.000537"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-18T03:05:44.038178" elapsed="0.000054"/>
</return>
<msg time="2026-04-18T03:05:44.038403" level="INFO">${encoded_value} = controller-config</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-04-18T03:05:44.037213" elapsed="0.001232"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-18T03:05:44.038668" elapsed="0.000280"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">controller-config</var>
<status status="PASS" start="2026-04-18T03:05:44.036463" elapsed="0.002541"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-18T03:05:44.039662" level="INFO">${value} = example-ipv4-topology</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-18T03:05:44.039287" elapsed="0.000402"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-18T03:05:44.040844" level="INFO">${encoded} = example-ipv4-topology</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-18T03:05:44.040356" elapsed="0.000516"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-18T03:05:44.040931" elapsed="0.000038"/>
</return>
<msg time="2026-04-18T03:05:44.041134" level="INFO">${encoded_value} = example-ipv4-topology</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-04-18T03:05:44.039901" elapsed="0.001264"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-18T03:05:44.041344" elapsed="0.000286"/>
</kw>
<var name="${key}">TOPOLOGY_NAME</var>
<var name="${value}">example-ipv4-topology</var>
<status status="PASS" start="2026-04-18T03:05:44.039127" elapsed="0.002549"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-18T03:05:44.036233" elapsed="0.005479"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-18T03:05:44.041761" elapsed="0.000028"/>
</return>
<msg time="2026-04-18T03:05:44.041922" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'controller-config', 'TOPOLOGY_NAME': 'example-ipv4-topology'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-18T03:05:44.034564" elapsed="0.007384"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:44.034129" elapsed="0.007852"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:44.042235" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:44.042016" elapsed="0.000290"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:44.034098" elapsed="0.008235"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:44.043051" level="INFO">${final_text} = rests/data/odl-data-change-counter-config:data-change-counter-config=data-change-counter</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:44.042523" elapsed="0.000557"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-18T03:05:44.043130" 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/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/../variables/bgpuser/change_counter.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/../variables/bgpuser/change_counter.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/../variables/bgpuser/change_counter/${file_name}.</doc>
<status status="PASS" start="2026-04-18T03:05:44.029523" elapsed="0.013735"/>
</kw>
<msg time="2026-04-18T03:05:44.043313" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:44.014892" elapsed="0.028476"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/../variables/bgpuser/change_counter.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/../variables/bgpuser/change_counter.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/../variables/bgpuser/change_counter/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:44.057898" elapsed="0.000047"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/../variables/bgpuser/change_counter.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/../variables/bgpuser/change_counter.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/../variables/bgpuser/change_counter/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:44.072055" 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/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/../variables/bgpuser/change_counter.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/../variables/bgpuser/change_counter.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/../variables/bgpuser/change_counter/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:44.086441" elapsed="0.000063"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:44.086814" elapsed="0.000027"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:44.087018" elapsed="0.000020"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:44.087556" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:44.087328" elapsed="0.000303"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:05:44.087307" elapsed="0.000359"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:44.087860" elapsed="0.000026"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:44.088045" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:44.088217" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-18T03:05:44.087264" elapsed="0.001006"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-18T03:05:44.087106" elapsed="0.001193"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:44.088492" elapsed="0.000023"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-18T03:05:44.088595" elapsed="0.000020"/>
</return>
<msg time="2026-04-18T03:05:44.088770" level="INFO">${uri} = rests/data/odl-data-change-counter-config:data-change-counter-config=data-change-counter</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from 1, by one  times.
Template variable ${j} is calculated as ${i} incremented by offset 0 ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-04-18T03:05:44.009865" elapsed="0.078935"/>
</kw>
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:44.119908" level="INFO">${file_path_stream} = /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/../variables/bgpuser/change_counter.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-04-18T03:05:44.119384" elapsed="0.000564"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-18T03:05:44.120987" level="FAIL">File '/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/variables/bgpuser/change_counter.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-04-18T03:05:44.120627" elapsed="0.000499">File '/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/variables/bgpuser/change_counter.vanadium/data.xml' does not exist.</status>
</kw>
<msg time="2026-04-18T03:05:44.121238" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-18T03:05:44.120133" elapsed="0.001131"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-18T03:05:44.122068" level="INFO">${file_path} = /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/../variables/bgpuser/change_counter/data.xml</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-18T03:05:44.121625" elapsed="0.000472"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-18T03:05:44.122465" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/variables/bgpuser/change_counter/data.xml"&gt;/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/variables/bgpuser/change_counter/data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-18T03:05:44.122898" level="INFO">${template} = &lt;data-change-counter-config xmlns="urn:opendaylight:params:xml:ns:yang:bgpcep:data-change-counter-config"&gt;
    &lt;counter-id&gt;data-change-counter&lt;/counter-id&gt;
    &lt;topology-name&gt;$TOPOLOGY_NAME&lt;/topology-...</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-18T03:05:44.122298" elapsed="0.000633"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:44.123462" level="INFO">&lt;data-change-counter-config xmlns="urn:opendaylight:params:xml:ns:yang:bgpcep:data-change-counter-config"&gt;
    &lt;counter-id&gt;data-change-counter&lt;/counter-id&gt;
    &lt;topology-name&gt;$TOPOLOGY_NAME&lt;/topology-name&gt;
&lt;/data-change-counter-config&gt;
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:44.123117" elapsed="0.000442"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="NOT RUN" start="2026-04-18T03:05:44.124074" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:44.123670" elapsed="0.000470"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:44.124763" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'controller-config', 'TOPOLOGY_NAME': 'example-ipv4-topology'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:05:44.124391" elapsed="0.000405"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:44.124178" elapsed="0.000657"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:44.123636" elapsed="0.001229"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:44.125709" level="INFO">${final_text} = &lt;data-change-counter-config xmlns="urn:opendaylight:params:xml:ns:yang:bgpcep:data-change-counter-config"&gt;
    &lt;counter-id&gt;data-change-counter&lt;/counter-id&gt;
    &lt;topology-name&gt;example-ipv4-topology&lt;/to...</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:44.125052" elapsed="0.000689"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-18T03:05:44.125807" 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/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/../variables/bgpuser/change_counter.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/../variables/bgpuser/change_counter.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/../variables/bgpuser/change_counter/${file_name}.</doc>
<status status="PASS" start="2026-04-18T03:05:44.118474" elapsed="0.007483"/>
</kw>
<msg time="2026-04-18T03:05:44.126018" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:44.104076" elapsed="0.021996"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/../variables/bgpuser/change_counter.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/../variables/bgpuser/change_counter.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/../variables/bgpuser/change_counter/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:44.142248" elapsed="0.000091"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/../variables/bgpuser/change_counter.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/../variables/bgpuser/change_counter.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/../variables/bgpuser/change_counter/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:44.158729" elapsed="0.000055"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/../variables/bgpuser/change_counter.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/../variables/bgpuser/change_counter.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/../variables/bgpuser/change_counter/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:44.171496" elapsed="0.000044"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:44.171749" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:44.171939" elapsed="0.000020"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:44.172438" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:44.172203" elapsed="0.000294"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:05:44.172185" elapsed="0.000343"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:44.172697" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:44.172948" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:44.173124" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-18T03:05:44.172144" elapsed="0.001033"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-18T03:05:44.172022" elapsed="0.001183"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:44.173357" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-18T03:05:44.173434" elapsed="0.000017"/>
</return>
<msg time="2026-04-18T03:05:44.173605" level="INFO">${data} = &lt;data-change-counter-config xmlns="urn:opendaylight:params:xml:ns:yang:bgpcep:data-change-counter-config"&gt;
    &lt;counter-id&gt;data-change-counter&lt;/counter-id&gt;
    &lt;topology-name&gt;example-ipv4-topology&lt;/to...</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-04-18T03:05:44.100778" elapsed="0.072858"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-18T03:05:44.175085" level="FAIL">File '/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/variables/bgpuser/change_counter/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-18T03:05:44.174777" elapsed="0.000389">File '/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/variables/bgpuser/change_counter/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-18T03:05:44.175262" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-18T03:05:44.174345" elapsed="0.000942"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:44.175646" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:44.175360" elapsed="0.000345"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:44.176203" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:05:44.175905" elapsed="0.000326"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:44.175729" elapsed="0.000536"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:44.175340" elapsed="0.000948"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-18T03:05:44.178840" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-18T03:05:44.176446" elapsed="0.002421"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-18T03:05:44.178920" elapsed="0.000032"/>
</return>
<msg time="2026-04-18T03:05:44.179079" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/../variables/bgpuser/change_counter/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-18T03:05:44.173985" elapsed="0.005120"/>
</kw>
<kw name="Put_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:44.180551" level="INFO">rests/data/odl-data-change-counter-config:data-change-counter-config=data-change-counter</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:44.180274" elapsed="0.000329"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:44.181077" level="INFO">&lt;data-change-counter-config xmlns="urn:opendaylight:params:xml:ns:yang:bgpcep:data-change-counter-config"&gt;
    &lt;counter-id&gt;data-change-counter&lt;/counter-id&gt;
    &lt;topology-name&gt;example-ipv4-topology&lt;/topology-name&gt;
&lt;/data-change-counter-config&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:44.180811" elapsed="0.000317"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:44.181596" level="INFO">{'Content-Type': 'application/xml'}</msg>
<arg>${content_type}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:44.181317" elapsed="0.000329"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:44.182122" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:44.181827" elapsed="0.000349"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-18T03:05:44.183092" level="INFO">${accumulator} = {'Content-Type': 'application/xml'}</msg>
<var>${accumulator}</var>
<arg>${first}</arg>
<doc>Returns a copy of the given dictionary.</doc>
<status status="PASS" start="2026-04-18T03:05:44.182886" elapsed="0.000232"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-18T03:05:44.183527" level="INFO">${items_to_add} = ['Accept', 'application/xml']</msg>
<var>${items_to_add}</var>
<arg>${second}</arg>
<doc>Returns items of the given ``dictionary`` as a list.</doc>
<status status="PASS" start="2026-04-18T03:05:44.183278" elapsed="0.000292"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${accumulator}</arg>
<arg>@{items_to_add}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-18T03:05:44.183729" elapsed="0.000216"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:44.184517" level="INFO">{'Content-Type': 'application/xml', 'Accept': 'application/xml'}</msg>
<arg>${accumulator}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:44.184108" elapsed="0.000481"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-18T03:05:44.184633" elapsed="0.000030"/>
</return>
<msg time="2026-04-18T03:05:44.184828" level="INFO">${headers} = {'Content-Type': 'application/xml', 'Accept': 'application/xml'}</msg>
<var>${headers}</var>
<arg>first=${content_type}</arg>
<arg>second=${accept}</arg>
<doc>Take two dicts, join them, return result. Second argument values take precedence.</doc>
<status status="PASS" start="2026-04-18T03:05:44.182436" elapsed="0.002422"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="PUT On Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:05:44.208411" level="INFO">PUT Request : url=http://10.30.170.68:8181/rests/data/odl-data-change-counter-config:data-change-counter-config=data-change-counter 
 path_url=/rests/data/odl-data-change-counter-config:data-change-counter-config=data-change-counter 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node0kakfil5cul8yhuuib3hrea271.node0', 'Content-Length': '242', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;data-change-counter-config xmlns="urn:opendaylight:params:xml:ns:yang:bgpcep:data-change-counter-config"&gt;
    &lt;counter-id&gt;data-change-counter&lt;/counter-id&gt;
    &lt;topology-name&gt;example-ipv4-topology&lt;/topology-name&gt;
&lt;/data-change-counter-config&gt; 
 </msg>
<msg time="2026-04-18T03:05:44.208614" level="INFO">PUT Response : url=http://10.30.170.68:8181/rests/data/odl-data-change-counter-config:data-change-counter-config=data-change-counter 
 status=201, reason=Created 
 headers={'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-04-18T03:05:44.208969" level="INFO">${response} = &lt;Response [201]&gt;</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="PASS" start="2026-04-18T03:05:44.187228" elapsed="0.021813"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:44.184933" elapsed="0.024235"/>
</branch>
<branch type="ELSE">
<kw name="PUT On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a PUT request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:44.209726" elapsed="0.000056"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:44.209239" elapsed="0.000653"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:44.184913" elapsed="0.025032"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:44.216368" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:44.212420" elapsed="0.004012"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:44.211856" elapsed="0.004628"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:44.211811" elapsed="0.004709"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:44.220316" level="INFO">201</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:44.216987" elapsed="0.003397"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:44.216627" elapsed="0.003806"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:44.216602" elapsed="0.003866"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:44.221375" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:44.220741" elapsed="0.000673"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:44.221846" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:44.221515" elapsed="0.000388"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:44.222392" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:05:44.222092" elapsed="0.000327"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:44.221927" elapsed="0.000527"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:44.221487" elapsed="0.000988"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:44.223022" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:44.222654" elapsed="0.000394"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:44.223351" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:44.223118" elapsed="0.000290"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:44.223934" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:05:44.223630" elapsed="0.000331"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:44.223432" elapsed="0.000564"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:44.223099" elapsed="0.000919"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:44.224178" elapsed="0.000386"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-18T03:05:44.225062" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:44.224737" elapsed="0.000352"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-18T03:05:44.225321" elapsed="0.002371"/>
</kw>
<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="PASS" start="2026-04-18T03:05:44.210921" elapsed="0.016839"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-18T03:05:44.227943" elapsed="0.000036"/>
</return>
<status status="PASS" start="2026-04-18T03:05:44.227831" elapsed="0.000184"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:44.227811" elapsed="0.000228"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:44.228194" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-18T03:05:44.228261" elapsed="0.000015"/>
</return>
<msg time="2026-04-18T03:05:44.230627" level="INFO">${response_text} = </msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>content_type=${content_type}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>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="PASS" start="2026-04-18T03:05:44.179448" elapsed="0.051208"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-18T03:05:44.230724" elapsed="0.000028"/>
</return>
<msg time="2026-04-18T03:05:44.230881" level="INFO">${response_text} = </msg>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>extension=xml</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>content_type=${HEADERS_XML}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>endline=${\n}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>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="PASS" start="2026-04-18T03:05:43.997306" elapsed="0.233600"/>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=response</arg>
<arg>mapping=${mapping}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:44.231266" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:44.231006" elapsed="0.000330"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:44.230988" elapsed="0.000372"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-18T03:05:44.231407" elapsed="0.000032"/>
</return>
<arg>${CHANGE_COUNTER_TEMPLATE_FOLDER}${/}change_counter</arg>
<arg>mapping=${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="PASS" start="2026-04-18T03:05:43.992578" elapsed="0.238981"/>
</kw>
<arg>example-ipv4-topology</arg>
<doc>Configure data change counter to count transactions affecting
${topology_name} instead of previously configured topology name.</doc>
<status status="PASS" start="2026-04-18T03:05:43.991270" elapsed="0.240353"/>
</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">
<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-04-18T03:05:44.232243" elapsed="0.000278"/>
</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-04-18T03:05:44.233460" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:44.233033" elapsed="0.000489"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:44.233012" elapsed="0.000553"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>'${SetupUtils__Known_Bug_ID}' != ''</arg>
<arg>Set_Known_Bug_Id</arg>
<arg>${EMPTY}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:44.233719" elapsed="0.000319"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:44.239406" level="INFO">${test_skipped} = False</msg>
<var>${test_skipped}</var>
<arg>len(re.findall('SKIPPED', """${TEST_MESSAGE}""")) &gt; 0</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:44.238959" elapsed="0.000477"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-04-18T03:05:44.239683" elapsed="0.000032"/>
</return>
<status status="PASS" start="2026-04-18T03:05:44.239516" elapsed="0.000231"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:44.239496" 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-04-18T03:05:44.239925" elapsed="0.000020"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<var>${reference}</var>
<arg>${SUITE_NAME}_${TEST_NAME}</arg>
<arg>[ /\.-]</arg>
<arg>_</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:44.240100" elapsed="0.000020"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:44.240276" elapsed="0.000021"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${msg}</var>
<arg>... click for list of related bugs or create a new one if needed (with the${newline}"${reference}"${newline}reference somewhere inside)</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:44.240448" elapsed="0.000020"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${bugs}</var>
<arg>"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=${reference}&amp;order=bug_status"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:44.240637" elapsed="0.000096"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:44.240892" elapsed="0.000021"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:44.241087" elapsed="0.000021"/>
</kw>
<doc>Report that a test failed and point to linked Bugzilla bug(s).
Linked bugs must contain the ${reference} inside comments (workaround
becasue of currently missing suitable field for external references and
not correctly working the CONTENT MATCHES filter).
Not FAILED (incl. SKIPPED) test are not reported.
This keyword must be used in the [Teardown] setting of the affected test
or as the first line of the test if FastFail module is not being
used. It reports the URL of the bug on console and also puts it
into the Robot log file.</doc>
<status status="PASS" start="2026-04-18T03:05:44.238624" elapsed="0.002544"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:44.232786" elapsed="0.008434"/>
</kw>
<doc>Test case teardown. Show linked bugs and start fast failing in case of failure.</doc>
<status status="PASS" start="2026-04-18T03:05:44.231916" elapsed="0.009347"/>
</kw>
<doc>Configure data change counter to count transactions in example-ipv4-topology instead of example-linkstate-topology.</doc>
<status status="PASS" start="2026-04-18T03:05:43.873244" elapsed="0.368064"/>
</test>
<test id="s1-s1-t4" name="Verify_Data_Change_Counter_Ready" line="113">
<kw name="Setup_Test_With_Logging_And_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Fail_This_Fast_On_Previous_Error" owner="FailFast">
<if>
<branch type="IF" condition="'''${SuiteFastFail}'''=='True'">
<kw name="Fail" owner="BuiltIn">
<arg>SKIPPED due to a failure in a previous fundamental test case.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:44.245034" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:44.244757" elapsed="0.000344"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:44.244738" elapsed="0.000387"/>
</if>
<doc>Mark (immediately) this test case as failed when fast-fail is enabled in suite.</doc>
<status status="PASS" start="2026-04-18T03:05:44.244570" 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-04-18T03:05:44.246211" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:44.246104" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:44.246086" 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-04-18T03:05:44.251633" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:44.251478" elapsed="0.000213"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:44.251456" elapsed="0.000262"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-18T03:05:44.253071" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-18T03:05:44.252505" elapsed="0.000604"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-18T03:05:44.253712" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-18T03:05:44.253325" elapsed="0.000422"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-18T03:05:44.253804" elapsed="0.000040"/>
</return>
<msg time="2026-04-18T03:05:44.253997" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-18T03:05:44.252022" elapsed="0.002005"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:44.261495" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:44.261359" elapsed="0.000210"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:44.261335" elapsed="0.000264"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:44.263085" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:44.262954" elapsed="0.000187"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:44.262932" elapsed="0.000237"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-18T03:05:44.263764" level="INFO">${karaf_connection_index} = 4</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-18T03:05:44.263365" elapsed="0.000432"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-18T03:05:44.264280" level="INFO">${current_connection_index} = 7</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:05:44.264013" elapsed="0.000299"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-18T03:05:44.315675" 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 "b "g "p "c "e "p "- "b "g "p "- "i "n "g "e "s "t "[78C- "[A[78Cm</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-18T03:05:44.264953" elapsed="0.050948"/>
</kw>
<msg time="2026-04-18T03:05:44.316130" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-18T03:05:44.316178" 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 "b "g "p "c "e "p "- "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:44.264547" elapsed="0.051670"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-18T03:05:44.362061" level="INFO">"i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "V "e "r "i "f "y "_ "D "a "t "a "_ "C "h "a "n "g "e "_ "C "o "u "n "t "e "r "_ "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-04-18T03:05:44.316972" elapsed="0.045324"/>
</kw>
<msg time="2026-04-18T03:05:44.362576" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-18T03:05:44.362632" level="INFO">${message_wait} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "V "e "r "i "f "y "_ "...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:44.316472" elapsed="0.046198"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:44.363235" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:44.362813" elapsed="0.000503"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:44.362762" elapsed="0.000590"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:44.364078" level="INFO"> "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "V "e "r "i "f "y "_ "D "a "t "a "_ "C "h "a "n "g "e "_ "C "o "u "n "t "e "r "_ "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-04-18T03:05:44.363585" elapsed="0.000609"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:44.364716" elapsed="0.000039"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:44.364308" elapsed="0.000509"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:44.364277" elapsed="0.000586"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-18T03:05:44.364932" 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-04-18T03:05:44.368173" elapsed="0.000161"/>
</kw>
<msg time="2026-04-18T03:05:44.368397" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:44.366909" elapsed="0.001645"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:44.368838" elapsed="0.000076"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:44.369175" elapsed="0.000075"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-18T03:05:44.366203" elapsed="0.003158"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-18T03:05:44.365516" elapsed="0.003980"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-18T03:05:44.262587" elapsed="0.107039"/>
</kw>
<msg time="2026-04-18T03:05:44.369736" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:05:44.369794" level="INFO">${message} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "V "e "r "i "f "y "_ "...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:44.261808" elapsed="0.108030"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:05:44.370070" elapsed="0.000032"/>
</return>
<status status="PASS" start="2026-04-18T03:05:44.369933" elapsed="0.000211"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:44.369912" elapsed="0.000264"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:44.370655" elapsed="0.000026"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:44.371010" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:05:44.371082" elapsed="0.000016"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-18T03:05:44.260886" elapsed="0.110307"/>
</kw>
<msg time="2026-04-18T03:05:44.371291" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:05:44.371336" level="INFO">${output} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "V "e "r "i "f "y "_ "...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:44.254512" elapsed="0.116863"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:44.371755" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:44.371452" elapsed="0.000357"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:44.371434" elapsed="0.000398"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-18T03:05:44.254318" elapsed="0.117539"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-18T03:05:44.254100" elapsed="0.117851"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-18T03:05:44.251031" elapsed="0.120981"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-18T03:05:44.245810" elapsed="0.126263"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:44.245332" elapsed="0.126790"/>
</kw>
<doc>Test case setup which skips on previous failure. If not, logs test case name to Karaf log.
Recommended to be used as the default test case setup.</doc>
<status status="PASS" start="2026-04-18T03:05:44.242329" elapsed="0.129848"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Get_Change_Count" owner="ChangeCounter">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:05:44.383693" level="INFO">GET Request : url=http://10.30.170.68:8181/rests/data/data-change-counter:data-change-counter?content=nonconfig 
 path_url=/rests/data/data-change-counter:data-change-counter?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0cikoz8bf13pu14i8fg3ixh1ws0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-18T03:05:44.384308" level="INFO">GET Response : url=http://10.30.170.68:8181/rests/data/data-change-counter:data-change-counter?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '174'} 
 body=&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt; 
 </msg>
<msg time="2026-04-18T03:05:44.384588" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${CC_DATA_CHANGE_COUNTER_URL}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-18T03:05:44.373303" elapsed="0.011349"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:44.390396" level="INFO">&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:44.385051" elapsed="0.005403"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:44.393318" level="FAIL">Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${count}</var>
<arg>json.loads('${response.text}')["data-change-counter:data-change-counter"]["counter"][0]["count"]</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-04-18T03:05:44.390665" elapsed="0.002794">Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<return>
<value>${count}</value>
<status status="NOT RUN" start="2026-04-18T03:05:44.393594" elapsed="0.000027"/>
</return>
<doc>GET data change request, assert status 200, return the value.</doc>
<status status="FAIL" start="2026-04-18T03:05:44.372932" elapsed="0.020822">Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get_Change_Count" owner="ChangeCounter">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:05:45.407393" level="INFO">GET Request : url=http://10.30.170.68:8181/rests/data/data-change-counter:data-change-counter?content=nonconfig 
 path_url=/rests/data/data-change-counter:data-change-counter?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0cikoz8bf13pu14i8fg3ixh1ws0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-18T03:05:45.407677" level="INFO">GET Response : url=http://10.30.170.68:8181/rests/data/data-change-counter:data-change-counter?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '174'} 
 body=&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt; 
 </msg>
<msg time="2026-04-18T03:05:45.407866" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${CC_DATA_CHANGE_COUNTER_URL}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-18T03:05:45.396412" elapsed="0.011494"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:45.411914" level="INFO">&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:45.408199" elapsed="0.003821"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:45.416302" level="FAIL">Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${count}</var>
<arg>json.loads('${response.text}')["data-change-counter:data-change-counter"]["counter"][0]["count"]</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-04-18T03:05:45.412279" elapsed="0.004195">Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<return>
<value>${count}</value>
<status status="NOT RUN" start="2026-04-18T03:05:45.416680" elapsed="0.000033"/>
</return>
<doc>GET data change request, assert status 200, return the value.</doc>
<status status="FAIL" start="2026-04-18T03:05:45.395337" elapsed="0.021618">Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get_Change_Count" owner="ChangeCounter">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:05:46.430114" level="INFO">GET Request : url=http://10.30.170.68:8181/rests/data/data-change-counter:data-change-counter?content=nonconfig 
 path_url=/rests/data/data-change-counter:data-change-counter?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0cikoz8bf13pu14i8fg3ixh1ws0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-18T03:05:46.430310" level="INFO">GET Response : url=http://10.30.170.68:8181/rests/data/data-change-counter:data-change-counter?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '174'} 
 body=&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt; 
 </msg>
<msg time="2026-04-18T03:05:46.430470" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${CC_DATA_CHANGE_COUNTER_URL}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-18T03:05:46.418870" elapsed="0.011638"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:46.434457" level="INFO">&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:46.430825" elapsed="0.003731"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:46.438504" level="FAIL">Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${count}</var>
<arg>json.loads('${response.text}')["data-change-counter:data-change-counter"]["counter"][0]["count"]</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-04-18T03:05:46.434839" elapsed="0.003849">Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<return>
<value>${count}</value>
<status status="NOT RUN" start="2026-04-18T03:05:46.438787" elapsed="0.000034"/>
</return>
<doc>GET data change request, assert status 200, return the value.</doc>
<status status="FAIL" start="2026-04-18T03:05:46.417983" elapsed="0.020981">Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get_Change_Count" owner="ChangeCounter">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:05:47.451584" level="INFO">GET Request : url=http://10.30.170.68:8181/rests/data/data-change-counter:data-change-counter?content=nonconfig 
 path_url=/rests/data/data-change-counter:data-change-counter?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0cikoz8bf13pu14i8fg3ixh1ws0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-18T03:05:47.451784" level="INFO">GET Response : url=http://10.30.170.68:8181/rests/data/data-change-counter:data-change-counter?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '174'} 
 body=&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt; 
 </msg>
<msg time="2026-04-18T03:05:47.451947" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${CC_DATA_CHANGE_COUNTER_URL}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-18T03:05:47.440922" elapsed="0.011070"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:47.456148" level="INFO">&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:47.452254" elapsed="0.003975"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:47.460419" level="FAIL">Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${count}</var>
<arg>json.loads('${response.text}')["data-change-counter:data-change-counter"]["counter"][0]["count"]</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-04-18T03:05:47.456470" elapsed="0.004140">Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<return>
<value>${count}</value>
<status status="NOT RUN" start="2026-04-18T03:05:47.460713" elapsed="0.000031"/>
</return>
<doc>GET data change request, assert status 200, return the value.</doc>
<status status="FAIL" start="2026-04-18T03:05:47.440019" elapsed="0.020867">Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Get_Change_Count" owner="ChangeCounter">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:05:48.474063" level="INFO">GET Request : url=http://10.30.170.68:8181/rests/data/data-change-counter:data-change-counter?content=nonconfig 
 path_url=/rests/data/data-change-counter:data-change-counter?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0cikoz8bf13pu14i8fg3ixh1ws0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-18T03:05:48.474321" level="INFO">GET Response : url=http://10.30.170.68:8181/rests/data/data-change-counter:data-change-counter?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '174'} 
 body=&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt; 
 </msg>
<msg time="2026-04-18T03:05:48.474561" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${CC_DATA_CHANGE_COUNTER_URL}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-18T03:05:48.463060" elapsed="0.011546"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:48.478948" level="INFO">&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:48.474979" elapsed="0.004051"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:48.482615" level="FAIL">Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${count}</var>
<arg>json.loads('${response.text}')["data-change-counter:data-change-counter"]["counter"][0]["count"]</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-04-18T03:05:48.479290" elapsed="0.003453">Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<return>
<value>${count}</value>
<status status="NOT RUN" start="2026-04-18T03:05:48.482823" elapsed="0.000026"/>
</return>
<doc>GET data change request, assert status 200, return the value.</doc>
<status status="FAIL" start="2026-04-18T03:05:48.462373" elapsed="0.020584">Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<msg time="2026-04-18T03:05:48.483053" level="FAIL">Keyword 'ChangeCounter.Get_Change_Count' failed after retrying 5 times. The last error was: Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<arg>5x</arg>
<arg>1s</arg>
<arg>ChangeCounter.Get_Change_Count</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-04-18T03:05:44.372360" elapsed="4.110793">Keyword 'ChangeCounter.Get_Change_Count' failed after retrying 5 times. The last error was: Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</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-04-18T03:05:48.484866" 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-04-18T03:05:48.484411" elapsed="0.000515"/>
</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-04-18T03:05:48.483925" elapsed="0.001071"/>
</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-04-18T03:05:48.486011" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:48.485589" elapsed="0.000486"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:48.485566" elapsed="0.000535"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>'${SetupUtils__Known_Bug_ID}' != ''</arg>
<arg>Set_Known_Bug_Id</arg>
<arg>${EMPTY}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:48.486257" elapsed="0.000363"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:48.491737" level="INFO">${test_skipped} = False</msg>
<var>${test_skipped}</var>
<arg>len(re.findall('SKIPPED', """${TEST_MESSAGE}""")) &gt; 0</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:48.491257" elapsed="0.000509"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="NOT RUN" start="2026-04-18T03:05:48.492013" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:48.491843" elapsed="0.000215"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:48.491822" elapsed="0.000258"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:48.492587" level="INFO">${newline} = 
</msg>
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:48.492233" elapsed="0.000384"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-18T03:05:48.493387" level="INFO">${reference} = bgpcep_bgp_ingest_mixed_txt_Singlepeer_Changecount_Verify_Data_Change_Counter_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-04-18T03:05:48.492891" elapsed="0.000535"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<msg time="2026-04-18T03:05:48.493947" level="INFO">${reference} = bgpcep_bgp_ingest_mixed_txt_singlepeer_changecount_verify_data_change_counter_ready</msg>
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="PASS" start="2026-04-18T03:05:48.493688" elapsed="0.000299"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:48.494807" level="INFO">${msg} = ... click for list of related bugs or create a new one if needed (with the
"bgpcep_bgp_ingest_mixed_txt_singlepeer_changecount_verify_data_change_counter_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-04-18T03:05:48.494244" elapsed="0.000605"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:48.495611" level="INFO">${bugs} = "https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=bgpcep_bgp_ingest_mixed_txt_singlepeer_changecount_verify_data_change_counter_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-04-18T03:05:48.495098" elapsed="0.000560"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<msg time="2026-04-18T03:05:48.496672" level="INFO">Set test message to:
... click for list of related bugs or create a new one if needed (with the
"bgpcep_bgp_ingest_mixed_txt_singlepeer_changecount_verify_data_change_counter_ready"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=bgpcep_bgp_ingest_mixed_txt_singlepeer_changecount_verify_data_change_counter_ready&amp;order=bug_status"

Keyword 'ChangeCounter.Get_Change_Count' failed after retrying 5 times. The last error was: Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="PASS" start="2026-04-18T03:05:48.495926" elapsed="0.000834"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:48.497451" level="INFO">... click for list of related bugs or create a new one if needed (with the
"bgpcep_bgp_ingest_mixed_txt_singlepeer_changecount_verify_data_change_counter_ready"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=bgpcep_bgp_ingest_mixed_txt_singlepeer_changecount_verify_data_change_counter_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-04-18T03:05:48.497002" elapsed="0.000543"/>
</kw>
<doc>Report that a test failed and point to linked Bugzilla bug(s).
Linked bugs must contain the ${reference} inside comments (workaround
becasue of currently missing suitable field for external references and
not correctly working the CONTENT MATCHES filter).
Not FAILED (incl. SKIPPED) test are not reported.
This keyword must be used in the [Teardown] setting of the affected test
or as the first line of the test if FastFail module is not being
used. It reports the URL of the bug on console and also puts it
into the Robot log file.</doc>
<status status="PASS" start="2026-04-18T03:05:48.490932" elapsed="0.006709"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:48.485330" elapsed="0.012381"/>
</kw>
<doc>Test case teardown. Show linked bugs and start fast failing in case of failure.</doc>
<status status="PASS" start="2026-04-18T03:05:48.483576" elapsed="0.014199"/>
</kw>
<doc>Data change counter might have been slower to start than ipv4 topology, wait for it.</doc>
<status status="FAIL" start="2026-04-18T03:05:44.241698" elapsed="4.256150">... click for list of related bugs or create a new one if needed (with the
"bgpcep_bgp_ingest_mixed_txt_singlepeer_changecount_verify_data_change_counter_ready"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=bgpcep_bgp_ingest_mixed_txt_singlepeer_changecount_verify_data_change_counter_ready&amp;order=bug_status"

Keyword 'ChangeCounter.Get_Change_Count' failed after retrying 5 times. The last error was: Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</test>
<test id="s1-s1-t5" name="Start_Talking_BGP_Speaker" line="117">
<kw name="Setup_Test_With_Logging_And_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Fail_This_Fast_On_Previous_Error" owner="FailFast">
<if>
<branch type="IF" condition="'''${SuiteFastFail}'''=='True'">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-18T03:05:48.504445" level="FAIL">SKIPPED due to a failure in a previous fundamental test case.</msg>
<arg>SKIPPED due to a failure in a previous fundamental test case.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-18T03:05:48.503870" elapsed="0.000702">SKIPPED due to a failure in a previous fundamental test case.</status>
</kw>
<status status="FAIL" start="2026-04-18T03:05:48.503478" elapsed="0.001196">SKIPPED due to a failure in a previous fundamental test case.</status>
</branch>
<status status="FAIL" start="2026-04-18T03:05:48.503441" elapsed="0.001282">SKIPPED due to a failure in a previous fundamental test case.</status>
</if>
<doc>Mark (immediately) this test case as failed when fast-fail is enabled in suite.</doc>
<status status="FAIL" start="2026-04-18T03:05:48.503141" elapsed="0.001719">SKIPPED due to a failure in a previous fundamental test case.</status>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<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="NOT RUN" start="2026-04-18T03:05:48.505125" elapsed="0.000034"/>
</kw>
<doc>Test case setup which skips on previous failure. If not, logs test case name to Karaf log.
Recommended to be used as the default test case setup.</doc>
<status status="FAIL" start="2026-04-18T03:05:48.499221" elapsed="0.006074">SKIPPED due to a failure in a previous fundamental test case.</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-04-18T03:05:48.507328" 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-04-18T03:05:48.506829" elapsed="0.000569"/>
</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-04-18T03:05:48.506230" elapsed="0.001363"/>
</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-04-18T03:05:48.508990" elapsed="0.000040"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:48.508329" elapsed="0.000758"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:48.508295" elapsed="0.000834"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>'${SetupUtils__Known_Bug_ID}' != ''</arg>
<arg>Set_Known_Bug_Id</arg>
<arg>${EMPTY}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:48.509376" elapsed="0.000559"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:48.517973" level="INFO">${test_skipped} = True</msg>
<var>${test_skipped}</var>
<arg>len(re.findall('SKIPPED', """${TEST_MESSAGE}""")) &gt; 0</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:48.517232" elapsed="0.000789"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-04-18T03:05:48.518386" elapsed="0.000050"/>
</return>
<status status="PASS" start="2026-04-18T03:05:48.518157" elapsed="0.000327"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:48.518123" elapsed="0.000400"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:48.518841" elapsed="0.000034"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<var>${reference}</var>
<arg>${SUITE_NAME}_${TEST_NAME}</arg>
<arg>[ /\.-]</arg>
<arg>_</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:48.519129" elapsed="0.000033"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:48.519417" 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-04-18T03:05:48.519704" elapsed="0.000035"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${bugs}</var>
<arg>"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=${reference}&amp;order=bug_status"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:48.519977" 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-04-18T03:05:48.520308" elapsed="0.000032"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:48.520602" elapsed="0.000034"/>
</kw>
<doc>Report that a test failed and point to linked Bugzilla bug(s).
Linked bugs must contain the ${reference} inside comments (workaround
becasue of currently missing suitable field for external references and
not correctly working the CONTENT MATCHES filter).
Not FAILED (incl. SKIPPED) test are not reported.
This keyword must be used in the [Teardown] setting of the affected test
or as the first line of the test if FastFail module is not being
used. It reports the URL of the bug on console and also puts it
into the Robot log file.</doc>
<status status="PASS" start="2026-04-18T03:05:48.516596" elapsed="0.004135"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:48.507978" elapsed="0.012837"/>
</kw>
<doc>Test case teardown. Show linked bugs and start fast failing in case of failure.</doc>
<status status="PASS" start="2026-04-18T03:05:48.505802" elapsed="0.015081"/>
</kw>
<doc>Start Python speaker to connect to ODL.</doc>
<status status="FAIL" start="2026-04-18T03:05:48.498415" elapsed="0.022531">Setup failed:
SKIPPED due to a failure in a previous fundamental test case.</status>
</test>
<test id="s1-s1-t6" name="Wait_For_Stable_Talking_Ipv4_Topology" line="124">
<kw name="Setup_Test_With_Logging_And_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Fail_This_Fast_On_Previous_Error" owner="FailFast">
<if>
<branch type="IF" condition="'''${SuiteFastFail}'''=='True'">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-18T03:05:48.528413" level="FAIL">SKIPPED due to a failure in a previous fundamental test case.</msg>
<arg>SKIPPED due to a failure in a previous fundamental test case.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-18T03:05:48.527857" elapsed="0.000692">SKIPPED due to a failure in a previous fundamental test case.</status>
</kw>
<status status="FAIL" start="2026-04-18T03:05:48.527431" elapsed="0.001226">SKIPPED due to a failure in a previous fundamental test case.</status>
</branch>
<status status="FAIL" start="2026-04-18T03:05:48.527397" elapsed="0.001315">SKIPPED due to a failure in a previous fundamental test case.</status>
</if>
<doc>Mark (immediately) this test case as failed when fast-fail is enabled in suite.</doc>
<status status="FAIL" start="2026-04-18T03:05:48.527108" elapsed="0.001754">SKIPPED due to a failure in a previous fundamental test case.</status>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<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="NOT RUN" start="2026-04-18T03:05:48.529147" elapsed="0.000036"/>
</kw>
<doc>Test case setup which skips on previous failure. If not, logs test case name to Karaf log.
Recommended to be used as the default test case setup.</doc>
<status status="FAIL" start="2026-04-18T03:05:48.523219" elapsed="0.006102">SKIPPED due to a failure in a previous fundamental test case.</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-04-18T03:05:48.531450" 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-04-18T03:05:48.530955" elapsed="0.000565"/>
</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-04-18T03:05:48.530348" elapsed="0.001292"/>
</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-04-18T03:05:48.533345" elapsed="0.000039"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:48.532425" elapsed="0.001014"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:48.532396" elapsed="0.001083"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>'${SetupUtils__Known_Bug_ID}' != ''</arg>
<arg>Set_Known_Bug_Id</arg>
<arg>${EMPTY}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:48.533867" elapsed="0.000645"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:48.539757" level="INFO">${test_skipped} = True</msg>
<var>${test_skipped}</var>
<arg>len(re.findall('SKIPPED', """${TEST_MESSAGE}""")) &gt; 0</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:48.539270" elapsed="0.000518"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-04-18T03:05:48.540030" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-04-18T03:05:48.539875" elapsed="0.000242"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:48.539849" elapsed="0.000294"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:48.540301" elapsed="0.000022"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<var>${reference}</var>
<arg>${SUITE_NAME}_${TEST_NAME}</arg>
<arg>[ /\.-]</arg>
<arg>_</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:48.540482" elapsed="0.000020"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:48.540677" elapsed="0.000021"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${msg}</var>
<arg>... click for list of related bugs or create a new one if needed (with the${newline}"${reference}"${newline}reference somewhere inside)</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:48.541018" elapsed="0.000026"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${bugs}</var>
<arg>"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=${reference}&amp;order=bug_status"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:48.541205" elapsed="0.000020"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:48.541375" elapsed="0.000020"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:48.541559" elapsed="0.000021"/>
</kw>
<doc>Report that a test failed and point to linked Bugzilla bug(s).
Linked bugs must contain the ${reference} inside comments (workaround
becasue of currently missing suitable field for external references and
not correctly working the CONTENT MATCHES filter).
Not FAILED (incl. SKIPPED) test are not reported.
This keyword must be used in the [Teardown] setting of the affected test
or as the first line of the test if FastFail module is not being
used. It reports the URL of the bug on console and also puts it
into the Robot log file.</doc>
<status status="PASS" start="2026-04-18T03:05:48.538935" elapsed="0.002703"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:48.532007" elapsed="0.009683"/>
</kw>
<doc>Test case teardown. Show linked bugs and start fast failing in case of failure.</doc>
<status status="PASS" start="2026-04-18T03:05:48.529843" elapsed="0.011889"/>
</kw>
<doc>Wait until example-ipv4-topology becomes stable. This is done by checking the change counter.</doc>
<status status="FAIL" start="2026-04-18T03:05:48.521720" elapsed="0.020063">Setup failed:
SKIPPED due to a failure in a previous fundamental test case.</status>
</test>
<test id="s1-s1-t7" name="Check_Talking_Ipv4_Topology_Count" 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-04-18T03:05:48.546307" elapsed="0.000264"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-18T03:05:48.546024" elapsed="0.000606"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:48.547702" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:48.547577" elapsed="0.000175"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:48.547552" elapsed="0.000222"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:48.553117" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:48.553006" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:48.552987" elapsed="0.000200"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-18T03:05:48.554321" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-18T03:05:48.553886" elapsed="0.000465"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-18T03:05:48.554866" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-18T03:05:48.554520" elapsed="0.000374"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-18T03:05:48.554939" elapsed="0.000033"/>
</return>
<msg time="2026-04-18T03:05:48.555100" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-18T03:05:48.553476" elapsed="0.001649"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:48.560964" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:48.560847" elapsed="0.000164"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:48.560827" elapsed="0.000206"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:48.562251" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:48.562131" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:48.562112" elapsed="0.000209"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-18T03:05:48.562799" level="INFO">${karaf_connection_index} = 4</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-18T03:05:48.562475" elapsed="0.000352"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-18T03:05:48.563228" level="INFO">${current_connection_index} = 7</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:05:48.562995" elapsed="0.000259"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-18T03:05:48.603079" 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 "b "g "p "c "e "p "- "b "g "p "- "i "n "g "e "s "t "[78C- "[A[78Cm</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-18T03:05:48.563835" elapsed="0.039405"/>
</kw>
<msg time="2026-04-18T03:05:48.603461" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-18T03:05:48.603509" 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 "b "g "p "c "e "p "- "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:48.563425" elapsed="0.040147"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-18T03:05:48.634295" level="INFO">"i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "C "h "e "c "k "_ "T "a "l "k "i "n "g "_ "I "p "v "4 "_ "T "o "p "o "l "o "g "y "_ "C "o "u "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-04-18T03:05:48.604758" elapsed="0.029726"/>
</kw>
<msg time="2026-04-18T03:05:48.635004" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-18T03:05:48.635056" level="INFO">${message_wait} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "C "h "e "c "k "_ "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-04-18T03:05:48.603810" elapsed="0.031295"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:48.635842" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:48.635360" elapsed="0.000542"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:48.635321" elapsed="0.000682"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:48.636695" level="INFO"> "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "C "h "e "c "k "_ "T "a "l "k "i "n "g "_ "I "p "v "4 "_ "T "o "p "o "l "o "g "y "_ "C "o "u "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-04-18T03:05:48.636186" elapsed="0.000619"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:48.637132" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:48.636884" elapsed="0.000304"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:48.636863" elapsed="0.000349"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-18T03:05:48.637250" elapsed="0.000037"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:05:48.641717" elapsed="0.000163"/>
</kw>
<msg time="2026-04-18T03:05:48.641946" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:48.640428" elapsed="0.001655"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:48.642363" elapsed="0.000074"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:48.642915" elapsed="0.000081"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-18T03:05:48.638228" elapsed="0.004884"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-18T03:05:48.637640" elapsed="0.005536"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-18T03:05:48.561812" elapsed="0.081463"/>
</kw>
<msg time="2026-04-18T03:05:48.643375" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:05:48.643420" level="INFO">${message} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "C "h "e "c "k "_ "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-04-18T03:05:48.561189" elapsed="0.082269"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:05:48.643983" elapsed="0.000039"/>
</return>
<status status="PASS" start="2026-04-18T03:05:48.643768" elapsed="0.000300"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:48.643698" elapsed="0.000402"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:48.644642" elapsed="0.000028"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:48.644994" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:05:48.645064" elapsed="0.000016"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-18T03:05:48.560427" elapsed="0.084746"/>
</kw>
<msg time="2026-04-18T03:05:48.645269" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:05:48.645312" level="INFO">${output} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "C "h "e "c "k "_ "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-04-18T03:05:48.555520" elapsed="0.089829"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:48.645743" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:48.645425" elapsed="0.000372"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:48.645408" elapsed="0.000412"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-18T03:05:48.555363" elapsed="0.090481"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-18T03:05:48.555184" elapsed="0.090693"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-18T03:05:48.552566" elapsed="0.093364"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-18T03:05:48.547250" elapsed="0.098735"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:48.546792" elapsed="0.099237"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-18T03:05:48.542901" elapsed="0.103182"/>
</kw>
<kw name="Check_Ipv4_Topology_Count" owner="PrefixCounting">
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get_Ipv4_Topology_Count" owner="PrefixCounting">
<kw name="Get_Ipv4_Topology" owner="PrefixCounting">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:05:48.660704" level="INFO">GET Request : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0cikoz8bf13pu14i8fg3ixh1ws0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-18T03:05:48.660859" level="INFO">GET Response : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '293'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xmlns="urn:opendaylight:params:xml:ns:yang:odl-bgp-topology-types"/&gt;&lt;/topology-types&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-04-18T03:05:48.660982" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${PC_NW_TOPOLOGY}=${topology}?content=nonconfig</arg>
<arg>expected_status=anything</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-18T03:05:48.648823" elapsed="0.012185"/>
</kw>
<if>
<branch type="IF" condition="${response.status_code} != 200">
<kw name="Fail" owner="BuiltIn">
<arg>Get on ${topology} returned status code ${response.status_code} with message: ${response.text}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:48.663822" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:48.661092" elapsed="0.002796"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:48.661072" elapsed="0.002866"/>
</if>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-18T03:05:48.663987" elapsed="0.000039"/>
</return>
<msg time="2026-04-18T03:05:48.666348" level="INFO">${topology} = &lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xml...</msg>
<var>${topology}</var>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>GET the example-ipv4-topology data, check status is 200, return the topology data.</doc>
<status status="PASS" start="2026-04-18T03:05:48.648368" elapsed="0.018017"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:48.667226" level="INFO">${prefix_count} = 0</msg>
<var>${prefix_count}</var>
<arg>len(re.findall('"prefix":"', '''${topology}'''))</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:48.666574" elapsed="0.000715"/>
</kw>
<return>
<value>${prefix_count}</value>
<status status="PASS" start="2026-04-18T03:05:48.667401" elapsed="0.000065"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Get topology. If not fail, return number of prefixes in the topology.</doc>
<status status="PASS" start="2026-04-18T03:05:48.647801" elapsed="0.019952"/>
</kw>
<msg time="2026-04-18T03:05:48.667992" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:05:48.668089" level="INFO">${message} = 0</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:48.647274" elapsed="0.020967"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:48.668816" elapsed="0.026127"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:05:48.695973" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-04-18T03:05:48.695838" elapsed="0.000203"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:48.695812" elapsed="0.000258"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:48.696248" elapsed="0.000024"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with 0.</doc>
<status status="PASS" start="2026-04-18T03:05:48.695396" elapsed="0.000937"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:05:48.696402" elapsed="0.000028"/>
</return>
<msg time="2026-04-18T03:05:48.696587" level="INFO">${actual_count} = 0</msg>
<var>${actual_count}</var>
<arg>Get_Ipv4_Topology_Count</arg>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:05:48.646782" elapsed="0.049834"/>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<msg time="2026-04-18T03:05:48.697131" level="INFO">Argument types are:
&lt;class 'int'&gt;
&lt;class 'str'&gt;</msg>
<msg time="2026-04-18T03:05:48.697266" level="FAIL">0 != 250000</msg>
<arg>${actual_count}</arg>
<arg>${expected_count}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="FAIL" start="2026-04-18T03:05:48.696782" elapsed="0.000557">0 != 250000</status>
</kw>
<arg>${COUNT_CHANGE_COUNT_SINGLE}</arg>
<doc>Check that the count of prefixes matches the expected count. Fails if it does not. In either case, collect garbage.</doc>
<status status="FAIL" start="2026-04-18T03:05:48.646303" elapsed="0.051143">0 != 250000</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-04-18T03:05:48.698835" 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-04-18T03:05:48.698495" elapsed="0.000383"/>
</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-04-18T03:05:48.698109" elapsed="0.000820"/>
</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-04-18T03:05:48.699795" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:48.699386" elapsed="0.000473"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:48.699366" elapsed="0.000518"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>'${SetupUtils__Known_Bug_ID}' != ''</arg>
<arg>Set_Known_Bug_Id</arg>
<arg>${EMPTY}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:48.700037" elapsed="0.000330"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:48.705648" level="INFO">${test_skipped} = False</msg>
<var>${test_skipped}</var>
<arg>len(re.findall('SKIPPED', """${TEST_MESSAGE}""")) &gt; 0</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:48.705197" elapsed="0.000479"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="NOT RUN" start="2026-04-18T03:05:48.705898" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:48.705753" elapsed="0.000187"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:48.705734" elapsed="0.000228"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:48.706428" level="INFO">${newline} = 
</msg>
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:48.706113" elapsed="0.000342"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-18T03:05:48.706907" level="INFO">${reference} = bgpcep_bgp_ingest_mixed_txt_Singlepeer_Changecount_Check_Talking_Ipv4_Topology_Count</msg>
<var>${reference}</var>
<arg>${SUITE_NAME}_${TEST_NAME}</arg>
<arg>[ /\.-]</arg>
<arg>_</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-18T03:05:48.706635" elapsed="0.000299"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<msg time="2026-04-18T03:05:48.707284" level="INFO">${reference} = bgpcep_bgp_ingest_mixed_txt_singlepeer_changecount_check_talking_ipv4_topology_count</msg>
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="PASS" start="2026-04-18T03:05:48.707098" elapsed="0.000219"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:48.707854" level="INFO">${msg} = ... click for list of related bugs or create a new one if needed (with the
"bgpcep_bgp_ingest_mixed_txt_singlepeer_changecount_check_talking_ipv4_topology_count"
reference somewhere inside)</msg>
<var>${msg}</var>
<arg>... click for list of related bugs or create a new one if needed (with the${newline}"${reference}"${newline}reference somewhere inside)</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:05:48.707481" elapsed="0.000401"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:48.708373" level="INFO">${bugs} = "https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=bgpcep_bgp_ingest_mixed_txt_singlepeer_changecount_check_talking_ipv4_topology_count&amp;order=bug_status"</msg>
<var>${bugs}</var>
<arg>"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=${reference}&amp;order=bug_status"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:05:48.708044" elapsed="0.000393"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<msg time="2026-04-18T03:05:48.709062" level="INFO">Set test message to:
... click for list of related bugs or create a new one if needed (with the
"bgpcep_bgp_ingest_mixed_txt_singlepeer_changecount_check_talking_ipv4_topology_count"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=bgpcep_bgp_ingest_mixed_txt_singlepeer_changecount_check_talking_ipv4_topology_count&amp;order=bug_status"

0 != 250000</msg>
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="PASS" start="2026-04-18T03:05:48.708618" elapsed="0.000606"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:48.709739" level="INFO">... click for list of related bugs or create a new one if needed (with the
"bgpcep_bgp_ingest_mixed_txt_singlepeer_changecount_check_talking_ipv4_topology_count"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=bgpcep_bgp_ingest_mixed_txt_singlepeer_changecount_check_talking_ipv4_topology_count&amp;order=bug_status"</msg>
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:48.709408" elapsed="0.000380"/>
</kw>
<doc>Report that a test failed and point to linked Bugzilla bug(s).
Linked bugs must contain the ${reference} inside comments (workaround
becasue of currently missing suitable field for external references and
not correctly working the CONTENT MATCHES filter).
Not FAILED (incl. SKIPPED) test are not reported.
This keyword must be used in the [Teardown] setting of the affected test
or as the first line of the test if FastFail module is not being
used. It reports the URL of the bug on console and also puts it
into the Robot log file.</doc>
<status status="PASS" start="2026-04-18T03:05:48.704878" elapsed="0.004966"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:48.699163" elapsed="0.010732"/>
</kw>
<doc>Test case teardown. Show linked bugs and start fast failing in case of failure.</doc>
<status status="PASS" start="2026-04-18T03:05:48.697782" elapsed="0.012154"/>
</kw>
<doc>Count the routes in example-ipv4-topology and fail if the count is not correct.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-18T03:05:48.542119" elapsed="0.167856">... click for list of related bugs or create a new one if needed (with the
"bgpcep_bgp_ingest_mixed_txt_singlepeer_changecount_check_talking_ipv4_topology_count"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=bgpcep_bgp_ingest_mixed_txt_singlepeer_changecount_check_talking_ipv4_topology_count&amp;order=bug_status"

0 != 250000</status>
</test>
<test id="s1-s1-t8" name="Kill_Talking_BGP_Speaker" line="138">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-18T03:05:48.714151" elapsed="0.000215"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-18T03:05:48.713880" 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-04-18T03:05:48.715460" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:48.715332" elapsed="0.000176"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:48.715312" elapsed="0.000235"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:48.720547" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:48.720387" elapsed="0.000212"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:48.720369" elapsed="0.000254"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-18T03:05:48.721743" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-18T03:05:48.721309" elapsed="0.000461"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-18T03:05:48.722234" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-18T03:05:48.721936" elapsed="0.000323"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-18T03:05:48.722305" elapsed="0.000032"/>
</return>
<msg time="2026-04-18T03:05:48.722463" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-18T03:05:48.720922" 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-04-18T03:05:48.728327" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:48.728208" elapsed="0.000178"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:48.728179" elapsed="0.000230"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:48.729796" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:48.729647" elapsed="0.000210"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:48.729628" elapsed="0.000254"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-18T03:05:48.730353" level="INFO">${karaf_connection_index} = 4</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-18T03:05:48.730045" elapsed="0.000335"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-18T03:05:48.730840" level="INFO">${current_connection_index} = 7</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:05:48.730580" elapsed="0.000288"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-18T03:05:48.772275" 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 "b "g "p "c "e "p "- "b "g "p "- "i "n "g "e "s "t "[78C- "[A[78Cm</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-18T03:05:48.731421" elapsed="0.041025"/>
</kw>
<msg time="2026-04-18T03:05:48.772767" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-18T03:05:48.772833" 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 "b "g "p "c "e "p "- "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:48.731062" elapsed="0.041822"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-18T03:05:48.803386" level="INFO">"i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "K "i "l "l "_ "T "a "l "k "i "n "g "_ "B "G "P "_ "S "p "e "a "k "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-18T03:05:48.773853" elapsed="0.029646"/>
</kw>
<msg time="2026-04-18T03:05:48.803685" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-18T03:05:48.803732" level="INFO">${message_wait} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "K "i "l "l "_ "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-04-18T03:05:48.773281" elapsed="0.030488"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:48.804155" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:48.803860" elapsed="0.000358"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:48.803833" elapsed="0.000413"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:48.804784" level="INFO"> "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "K "i "l "l "_ "T "a "l "k "i "n "g "_ "B "G "P "_ "S "p "e "a "k "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:48.804422" elapsed="0.000435"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:48.805146" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:48.804926" elapsed="0.000274"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:48.804907" elapsed="0.000316"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-18T03:05:48.805260" elapsed="0.000037"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:05:48.807956" elapsed="0.000148"/>
</kw>
<msg time="2026-04-18T03:05:48.808166" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:48.806794" elapsed="0.001543"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:48.808771" elapsed="0.000079"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:48.809117" elapsed="0.000074"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-18T03:05:48.806144" elapsed="0.003185"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-18T03:05:48.805583" elapsed="0.003835"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-18T03:05:48.729304" elapsed="0.080381"/>
</kw>
<msg time="2026-04-18T03:05:48.809790" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:05:48.809835" level="INFO">${message} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "K "i "l "l "_ "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-04-18T03:05:48.728620" elapsed="0.081254"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:05:48.810079" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-18T03:05:48.809953" elapsed="0.000189"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:48.809933" 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-04-18T03:05:48.810610" elapsed="0.000027"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:48.810959" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:05:48.811030" elapsed="0.000017"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-18T03:05:48.727838" elapsed="0.083303"/>
</kw>
<msg time="2026-04-18T03:05:48.811235" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:05:48.811279" level="INFO">${output} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "K "i "l "l "_ "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-04-18T03:05:48.722895" elapsed="0.088423"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:48.811670" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:48.811395" elapsed="0.000329"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:48.811378" elapsed="0.000370"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-18T03:05:48.722747" elapsed="0.089071"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-18T03:05:48.722564" elapsed="0.089291"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-18T03:05:48.720026" elapsed="0.091888"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-18T03:05:48.715041" elapsed="0.096930"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:48.714606" elapsed="0.097413"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-18T03:05:48.711452" elapsed="0.100622"/>
</kw>
<kw name="Store_Change_Count">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get_Change_Count" owner="ChangeCounter">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:05:48.819251" level="INFO">GET Request : url=http://10.30.170.68:8181/rests/data/data-change-counter:data-change-counter?content=nonconfig 
 path_url=/rests/data/data-change-counter:data-change-counter?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0cikoz8bf13pu14i8fg3ixh1ws0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-18T03:05:48.819391" level="INFO">GET Response : url=http://10.30.170.68:8181/rests/data/data-change-counter:data-change-counter?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '174'} 
 body=&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt; 
 </msg>
<msg time="2026-04-18T03:05:48.819511" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${CC_DATA_CHANGE_COUNTER_URL}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-18T03:05:48.813539" elapsed="0.006020"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:48.822772" level="INFO">&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:48.819732" elapsed="0.003112"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:48.826633" level="FAIL">Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${count}</var>
<arg>json.loads('${response.text}')["data-change-counter:data-change-counter"]["counter"][0]["count"]</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-04-18T03:05:48.823074" elapsed="0.003718">Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<return>
<value>${count}</value>
<status status="NOT RUN" start="2026-04-18T03:05:48.826884" elapsed="0.000026"/>
</return>
<doc>GET data change request, assert status 200, return the value.</doc>
<status status="FAIL" start="2026-04-18T03:05:48.813022" elapsed="0.014014">Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<msg time="2026-04-18T03:05:48.827179" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:05:48.827239" level="INFO">${count} = Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-chang...</msg>
<var>${status}</var>
<var>${count}</var>
<arg>ChangeCounter.Get_Change_Count</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:48.812611" elapsed="0.014664"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${last_change_count_single}</arg>
<arg>${count}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:48.827721" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:48.827374" elapsed="0.000428"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:48.827349" elapsed="0.000486"/>
</if>
<doc>Get the count of changes from BGP change counter. Ignore error or store the value.</doc>
<status status="PASS" start="2026-04-18T03:05:48.812265" elapsed="0.015636"/>
</kw>
<kw name="Kill_BGP_Speaker" owner="BGPSpeaker">
<kw name="Write_Bare_Ctrl_C" owner="RemoteBash">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:48.829399" level="INFO">${ctrl_c} = </msg>
<var>${ctrl_c}</var>
<arg>chr(int(3))</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:48.829090" elapsed="0.000337"/>
</kw>
<kw name="Write Bare" owner="SSHLibrary">
<arg>${ctrl_c}</arg>
<doc>Writes the given ``text`` on the remote machine without appending a newline.</doc>
<status status="PASS" start="2026-04-18T03:05:48.829599" elapsed="0.000240"/>
</kw>
<doc>Construct ctrl+c character and SSH-write it (without endline) to the current SSH connection.
Do not read anything yet.</doc>
<status status="PASS" start="2026-04-18T03:05:48.828777" elapsed="0.001121"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-18T03:05:48.833072" level="INFO">^C[?2004l[?2004h[?2004l
[?2004h[jenkins@releng-35801-190-1-mininet-ovs-217-0 ~]&gt;</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="PASS" start="2026-04-18T03:05:48.830399" elapsed="0.002820"/>
</kw>
<msg time="2026-04-18T03:05:48.833441" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:05:48.833567" level="INFO">${message} =  ^C[?2004l[?2004h[?2004l
[?2004h[jenkins@releng-35801-190-1-mininet-ovs-217-0 ~]&gt;</msg>
<var>${status}</var>
<var>${message}</var>
<arg>SSHLibrary.Read_Until_Prompt</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:48.830067" elapsed="0.003637"/>
</kw>
<kw name="Dump_BGP_Speaker_Logs" owner="BGPSpeaker">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-18T03:05:48.835142" level="INFO">Executing command 'cat play.py.out'.</msg>
<msg time="2026-04-18T03:05:48.848068" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-18T03:05:48.848275" level="INFO">${output_log} = </msg>
<var>${output_log}</var>
<arg>cat ${BGPSpeaker__OUTPUT_LOG}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-18T03:05:48.834822" elapsed="0.013494"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:48.849134" level="INFO"/>
<arg>${output_log}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:48.848621" elapsed="0.000582"/>
</kw>
<doc>Send all output produced by the play.py utility to Robot logs.
This needs to be called if your suite detects play.py crashing and bypasses
Kill_BGP_Speaker in that case otherwise the output of play.py (which most
likely contains clues about why it crashed) will be lost.</doc>
<status status="PASS" start="2026-04-18T03:05:48.834155" elapsed="0.015142"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<status status="PASS" start="2026-04-18T03:05:48.849611" elapsed="0.000048"/>
</return>
<status status="PASS" start="2026-04-18T03:05:48.849403" elapsed="0.000303"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:48.849371" elapsed="0.000371"/>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${message}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:48.850038" elapsed="0.000052"/>
</kw>
<kw name="Fail" owner="BuiltIn">
<arg>The prompt was not seen within timeout period.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:48.850432" elapsed="0.000048"/>
</kw>
<doc>Interrupt play.py, fail if no prompt is seen within SSHLibrary timeout.
Also dump the logs with the output the program produced.
This keyword is also suitable for stopping BGP manager.</doc>
<status status="PASS" start="2026-04-18T03:05:48.828267" elapsed="0.022382"/>
</kw>
<kw name="Do_Not_Fail_Fast_From_Now_On" owner="FailFast">
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:48.852586" level="INFO">${SuiteFastFail} = False</msg>
<arg>${SuiteFastFail}</arg>
<arg>False</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-18T03:05:48.851803" elapsed="0.000958"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-04-18T03:05:48.851106" elapsed="0.001796"/>
</kw>
<kw name="Teardown_Test_Show_Bugs_If_Test_Failed" owner="SetupUtils" type="TEARDOWN">
<kw name="SetupUtils__Report_Bugs_Causing_Failure" owner="SetupUtils">
<if>
<branch type="IF" condition="'${SetupUtils__Known_Bug_ID}' != ''">
<kw name="Report Failure Due To Bug" owner="Utils">
<arg>${SetupUtils__Known_Bug_ID}</arg>
<doc>Report that a test failed due to a known Bugzilla bug whose
number is provided as an argument.
Not FAILED (incl. SKIPPED) test are not reported.
This keyword must be used in the [Teardown] setting of the affected test
or as the first line of the test if FastFail module is not being
used. It reports the URL of the bug on console and also puts it
into the Robot log file.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:48.856156" elapsed="0.000060"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:48.855240" elapsed="0.001061"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:48.855192" elapsed="0.001168"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>'${SetupUtils__Known_Bug_ID}' != ''</arg>
<arg>Set_Known_Bug_Id</arg>
<arg>${EMPTY}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:48.856808" elapsed="0.000785"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:48.863145" level="INFO">${test_skipped} = False</msg>
<var>${test_skipped}</var>
<arg>len(re.findall('SKIPPED', """${TEST_MESSAGE}""")) &gt; 0</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:48.862718" elapsed="0.000456"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-04-18T03:05:48.863397" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-18T03:05:48.863250" elapsed="0.000206"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:48.863231" elapsed="0.000250"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:48.863654" elapsed="0.000022"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<var>${reference}</var>
<arg>${SUITE_NAME}_${TEST_NAME}</arg>
<arg>[ /\.-]</arg>
<arg>_</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:48.863834" elapsed="0.000021"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:48.864012" elapsed="0.000020"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${msg}</var>
<arg>... click for list of related bugs or create a new one if needed (with the${newline}"${reference}"${newline}reference somewhere inside)</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:48.864185" elapsed="0.000020"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${bugs}</var>
<arg>"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=${reference}&amp;order=bug_status"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:48.864357" elapsed="0.000021"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:48.864544" elapsed="0.000021"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:48.864761" elapsed="0.000033"/>
</kw>
<doc>Report that a test failed and point to linked Bugzilla bug(s).
Linked bugs must contain the ${reference} inside comments (workaround
becasue of currently missing suitable field for external references and
not correctly working the CONTENT MATCHES filter).
Not FAILED (incl. SKIPPED) test are not reported.
This keyword must be used in the [Teardown] setting of the affected test
or as the first line of the test if FastFail module is not being
used. It reports the URL of the bug on console and also puts it
into the Robot log file.</doc>
<status status="PASS" start="2026-04-18T03:05:48.862383" elapsed="0.002477"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:48.854713" elapsed="0.010198"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-04-18T03:05:48.853682" elapsed="0.011273"/>
</kw>
<doc>Abort the Python speaker. Also, attempt to stop failing fast.</doc>
<tag>critical</tag>
<status status="PASS" start="2026-04-18T03:05:48.710606" elapsed="0.154398"/>
</test>
<test id="s1-s1-t9" name="Store_Results_For_Talking_BGP_Speaker" 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-04-18T03:05:48.869135" elapsed="0.000241"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-18T03:05:48.868854" 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-04-18T03:05:48.870612" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:48.870479" elapsed="0.000182"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:48.870458" elapsed="0.000226"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:48.875626" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:48.875501" elapsed="0.000172"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:48.875482" elapsed="0.000214"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-18T03:05:48.876744" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-18T03:05:48.876317" elapsed="0.000457"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-18T03:05:48.877241" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-18T03:05:48.876941" elapsed="0.000327"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-18T03:05:48.877313" elapsed="0.000030"/>
</return>
<msg time="2026-04-18T03:05:48.877469" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-18T03:05:48.875933" elapsed="0.001561"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:48.883366" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:48.883253" elapsed="0.000162"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:48.883233" elapsed="0.000204"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:48.884668" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:48.884551" elapsed="0.000189"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:48.884510" elapsed="0.000254"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-18T03:05:48.885232" level="INFO">${karaf_connection_index} = 4</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-18T03:05:48.884922" elapsed="0.000339"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-18T03:05:48.885700" level="INFO">${current_connection_index} = 7</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:05:48.885427" elapsed="0.000300"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-18T03:05:48.927320" 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 "b "g "p "c "e "p "- "b "g "p "- "i "n "g "e "s "t "[78C- "[A[78Cm</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-18T03:05:48.886234" elapsed="0.041320"/>
</kw>
<msg time="2026-04-18T03:05:48.927801" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-18T03:05:48.927848" 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 "b "g "p "c "e "p "- "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:48.885892" elapsed="0.041993"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-18T03:05:48.961962" level="INFO">"i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "S "t "o "r "e "_ "R "e "s "u "l "t "s "_ "F "o "r "_ "T "a "l "k "i "n "g "_ "B "G "P "_ "S "p "e "a "k "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-18T03:05:48.928602" elapsed="0.033519"/>
</kw>
<msg time="2026-04-18T03:05:48.962323" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-18T03:05:48.962373" level="INFO">${message_wait} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "S "t "o "r "e "_ "R "...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:48.928138" elapsed="0.034273"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:48.962808" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:48.962517" elapsed="0.000348"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:48.962487" elapsed="0.000405"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:48.963413" level="INFO"> "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "S "t "o "r "e "_ "R "e "s "u "l "t "s "_ "F "o "r "_ "T "a "l "k "i "n "g "_ "B "G "P "_ "S "p "e "a "k "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:48.963058" 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-04-18T03:05:48.963898" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:48.963585" elapsed="0.000371"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:48.963564" elapsed="0.000417"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-18T03:05:48.964019" elapsed="0.000055"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:05:48.967083" elapsed="0.000166"/>
</kw>
<msg time="2026-04-18T03:05:48.967317" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:48.965783" elapsed="0.001673"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:48.967766" elapsed="0.000077"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:48.968130" elapsed="0.000078"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-18T03:05:48.965004" elapsed="0.003325"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-18T03:05:48.964381" elapsed="0.004039"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-18T03:05:48.884223" elapsed="0.084379"/>
</kw>
<msg time="2026-04-18T03:05:48.968724" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:05:48.968769" level="INFO">${message} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "S "t "o "r "e "_ "R "...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:48.883614" elapsed="0.085193"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:05:48.969027" elapsed="0.000042"/>
</return>
<status status="PASS" start="2026-04-18T03:05:48.968913" elapsed="0.000197"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:48.968891" elapsed="0.000245"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:48.969802" 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-04-18T03:05:48.970197" elapsed="0.000027"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:05:48.970273" elapsed="0.000017"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-18T03:05:48.882902" elapsed="0.087502"/>
</kw>
<msg time="2026-04-18T03:05:48.970512" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:05:48.970578" level="INFO">${output} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "S "t "o "r "e "_ "R "...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:48.877896" elapsed="0.092723"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:48.970959" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:48.970699" elapsed="0.000462"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:48.970681" elapsed="0.000510"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-18T03:05:48.877745" elapsed="0.093471"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-18T03:05:48.877568" elapsed="0.093683"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-18T03:05:48.875140" elapsed="0.096169"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-18T03:05:48.870152" elapsed="0.101217"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:48.869644" elapsed="0.101842"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-18T03:05:48.866241" elapsed="0.105329"/>
</kw>
<kw name="Store_File_To_Workspace">
<kw name="List Files In Directory" owner="SSHLibrary">
<msg time="2026-04-18T03:05:48.979801" level="INFO">6 files:
.bash_logout
.bashrc
.profile
ipaddr.py
lf-env.sh
play.py</msg>
<msg time="2026-04-18T03:05:48.979904" level="INFO">${files} = ['.bash_logout', '.bashrc', '.profile', 'ipaddr.py', 'lf-env.sh', 'play.py']</msg>
<var>${files}</var>
<arg>.</arg>
<doc>A wrapper for `List Directory` that returns only files.</doc>
<status status="PASS" start="2026-04-18T03:05:48.972200" elapsed="0.007729"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-18T03:05:48.980240" level="INFO">Executing command 'cat totals-bgp.csv'.</msg>
<msg time="2026-04-18T03:05:48.992552" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-18T03:05:48.992774" level="INFO">${output_log} = </msg>
<var>${output_log}</var>
<arg>cat ${src_file_name}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-18T03:05:48.980099" elapsed="0.012729"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:48.994311" level="INFO"/>
<arg>${output_log}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:48.993623" elapsed="0.000786"/>
</kw>
<kw name="Create File" owner="OperatingSystem">
<msg time="2026-04-18T03:05:48.996190" level="INFO" html="true">Created file '&lt;a href="file:///w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/totals-bgp.csv"&gt;/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/totals-bgp.csv&lt;/a&gt;'.</msg>
<arg>${dst_file_name}</arg>
<arg>${output_log}</arg>
<doc>Creates a file with the given content and encoding.</doc>
<status status="PASS" start="2026-04-18T03:05:48.994843" elapsed="0.001485"/>
</kw>
<arg>totals-${RESULTS_FILE_NAME}</arg>
<arg>totals-${RESULTS_FILE_NAME}</arg>
<doc>Store the provided file from the SSH client to workspace.</doc>
<status status="PASS" start="2026-04-18T03:05:48.971769" elapsed="0.024701"/>
</kw>
<kw name="Store_File_To_Workspace">
<kw name="List Files In Directory" owner="SSHLibrary">
<msg time="2026-04-18T03:05:49.038416" level="INFO">6 files:
.bash_logout
.bashrc
.profile
ipaddr.py
lf-env.sh
play.py</msg>
<msg time="2026-04-18T03:05:49.038587" level="INFO">${files} = ['.bash_logout', '.bashrc', '.profile', 'ipaddr.py', 'lf-env.sh', 'play.py']</msg>
<var>${files}</var>
<arg>.</arg>
<doc>A wrapper for `List Directory` that returns only files.</doc>
<status status="PASS" start="2026-04-18T03:05:48.997931" elapsed="0.040694"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-18T03:05:49.039076" level="INFO">Executing command 'cat performance-bgp.csv'.</msg>
<msg time="2026-04-18T03:05:49.052106" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-18T03:05:49.052374" level="INFO">${output_log} = </msg>
<var>${output_log}</var>
<arg>cat ${src_file_name}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-18T03:05:49.038872" elapsed="0.013560"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:49.053859" level="INFO"/>
<arg>${output_log}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:49.053054" elapsed="0.000910"/>
</kw>
<kw name="Create File" owner="OperatingSystem">
<msg time="2026-04-18T03:05:49.055245" level="INFO" html="true">Created file '&lt;a href="file:///w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/performance-bgp.csv"&gt;/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/performance-bgp.csv&lt;/a&gt;'.</msg>
<arg>${dst_file_name}</arg>
<arg>${output_log}</arg>
<doc>Creates a file with the given content and encoding.</doc>
<status status="PASS" start="2026-04-18T03:05:49.054421" elapsed="0.000965"/>
</kw>
<arg>performance-${RESULTS_FILE_NAME}</arg>
<arg>performance-${RESULTS_FILE_NAME}</arg>
<doc>Store the provided file from the SSH client to workspace.</doc>
<status status="PASS" start="2026-04-18T03:05:48.996873" elapsed="0.058717"/>
</kw>
<kw name="Store_File_To_Workspace">
<kw name="List Files In Directory" owner="SSHLibrary">
<msg time="2026-04-18T03:05:49.098640" level="INFO">6 files:
.bash_logout
.bashrc
.profile
ipaddr.py
lf-env.sh
play.py</msg>
<msg time="2026-04-18T03:05:49.098860" level="INFO">${files} = ['.bash_logout', '.bashrc', '.profile', 'ipaddr.py', 'lf-env.sh', 'play.py']</msg>
<var>${files}</var>
<arg>.</arg>
<doc>A wrapper for `List Directory` that returns only files.</doc>
<status status="PASS" start="2026-04-18T03:05:49.057333" elapsed="0.041584"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-18T03:05:49.099846" level="INFO">Executing command 'cat totals-bgp.csv'.</msg>
<msg time="2026-04-18T03:05:49.112993" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-18T03:05:49.113280" level="INFO">${output_log} = </msg>
<var>${output_log}</var>
<arg>cat ${src_file_name}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-18T03:05:49.099419" elapsed="0.013918"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:49.114616" level="INFO"/>
<arg>${output_log}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:49.113793" elapsed="0.000925"/>
</kw>
<kw name="Create File" owner="OperatingSystem">
<msg time="2026-04-18T03:05:49.115866" level="INFO" html="true">Created file '&lt;a href="file:///w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/changecount-talking-totals-bgp.csv"&gt;/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/changecount-talking-totals-bgp.csv&lt;/a&gt;'.</msg>
<arg>${dst_file_name}</arg>
<arg>${output_log}</arg>
<doc>Creates a file with the given content and encoding.</doc>
<status status="PASS" start="2026-04-18T03:05:49.115169" elapsed="0.000825"/>
</kw>
<arg>totals-${RESULTS_FILE_NAME}</arg>
<arg>changecount-talking-totals-${RESULTS_FILE_NAME}</arg>
<doc>Store the provided file from the SSH client to workspace.</doc>
<status status="PASS" start="2026-04-18T03:05:49.055978" elapsed="0.060156"/>
</kw>
<kw name="Store_File_To_Workspace">
<kw name="List Files In Directory" owner="SSHLibrary">
<msg time="2026-04-18T03:05:49.161377" level="INFO">6 files:
.bash_logout
.bashrc
.profile
ipaddr.py
lf-env.sh
play.py</msg>
<msg time="2026-04-18T03:05:49.161631" level="INFO">${files} = ['.bash_logout', '.bashrc', '.profile', 'ipaddr.py', 'lf-env.sh', 'play.py']</msg>
<var>${files}</var>
<arg>.</arg>
<doc>A wrapper for `List Directory` that returns only files.</doc>
<status status="PASS" start="2026-04-18T03:05:49.117573" elapsed="0.044101"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-18T03:05:49.162286" level="INFO">Executing command 'cat performance-bgp.csv'.</msg>
<msg time="2026-04-18T03:05:49.174967" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-18T03:05:49.175235" level="INFO">${output_log} = </msg>
<var>${output_log}</var>
<arg>cat ${src_file_name}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-18T03:05:49.162017" elapsed="0.013262"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:49.176130" level="INFO"/>
<arg>${output_log}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:49.175650" elapsed="0.000546"/>
</kw>
<kw name="Create File" owner="OperatingSystem">
<msg time="2026-04-18T03:05:49.176993" level="INFO" html="true">Created file '&lt;a href="file:///w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/changecount-talking-performance-bgp.csv"&gt;/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/changecount-talking-performance-bgp.csv&lt;/a&gt;'.</msg>
<arg>${dst_file_name}</arg>
<arg>${output_log}</arg>
<doc>Creates a file with the given content and encoding.</doc>
<status status="PASS" start="2026-04-18T03:05:49.176499" elapsed="0.000576"/>
</kw>
<arg>performance-${RESULTS_FILE_NAME}</arg>
<arg>changecount-talking-performance-${RESULTS_FILE_NAME}</arg>
<doc>Store the provided file from the SSH client to workspace.</doc>
<status status="PASS" start="2026-04-18T03:05:49.116483" elapsed="0.060747"/>
</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">
<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-04-18T03:05:49.178208" elapsed="0.000394"/>
</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-04-18T03:05:49.179905" elapsed="0.000038"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:49.179281" elapsed="0.000802"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:49.179244" elapsed="0.000885"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>'${SetupUtils__Known_Bug_ID}' != ''</arg>
<arg>Set_Known_Bug_Id</arg>
<arg>${EMPTY}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:49.180360" elapsed="0.000493"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:49.186681" level="INFO">${test_skipped} = False</msg>
<var>${test_skipped}</var>
<arg>len(re.findall('SKIPPED', """${TEST_MESSAGE}""")) &gt; 0</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:49.186170" elapsed="0.000541"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-04-18T03:05:49.186948" elapsed="0.000036"/>
</return>
<status status="PASS" start="2026-04-18T03:05:49.186794" elapsed="0.000223"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:49.186772" elapsed="0.000270"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.187198" elapsed="0.000023"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<var>${reference}</var>
<arg>${SUITE_NAME}_${TEST_NAME}</arg>
<arg>[ /\.-]</arg>
<arg>_</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.187377" elapsed="0.000021"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.187571" elapsed="0.000021"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${msg}</var>
<arg>... click for list of related bugs or create a new one if needed (with the${newline}"${reference}"${newline}reference somewhere inside)</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.187743" elapsed="0.000020"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${bugs}</var>
<arg>"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=${reference}&amp;order=bug_status"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.187913" elapsed="0.000020"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.188082" elapsed="0.000020"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.188248" elapsed="0.000020"/>
</kw>
<doc>Report that a test failed and point to linked Bugzilla bug(s).
Linked bugs must contain the ${reference} inside comments (workaround
becasue of currently missing suitable field for external references and
not correctly working the CONTENT MATCHES filter).
Not FAILED (incl. SKIPPED) test are not reported.
This keyword must be used in the [Teardown] setting of the affected test
or as the first line of the test if FastFail module is not being
used. It reports the URL of the bug on console and also puts it
into the Robot log file.</doc>
<status status="PASS" start="2026-04-18T03:05:49.185811" elapsed="0.002516"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:49.178960" elapsed="0.009418"/>
</kw>
<doc>Test case teardown. Show linked bugs and start fast failing in case of failure.</doc>
<status status="PASS" start="2026-04-18T03:05:49.177705" elapsed="0.010714"/>
</kw>
<doc>Store results for plotting</doc>
<status status="PASS" start="2026-04-18T03:05:48.865551" elapsed="0.322914"/>
</test>
<test id="s1-s1-t10" name="Wait_For_Stable_Ipv4_Topology_After_Talking" line="156">
<kw name="Setup_Test_With_Logging_And_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Fail_This_Fast_On_Previous_Error" owner="FailFast">
<if>
<branch type="IF" condition="'''${SuiteFastFail}'''=='True'">
<kw name="Fail" owner="BuiltIn">
<arg>SKIPPED due to a failure in a previous fundamental test case.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.193558" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:49.193250" elapsed="0.000375"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:49.193223" elapsed="0.000429"/>
</if>
<doc>Mark (immediately) this test case as failed when fast-fail is enabled in suite.</doc>
<status status="PASS" start="2026-04-18T03:05:49.193012" elapsed="0.000691"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:49.194849" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:49.194735" elapsed="0.000164"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:49.194716" 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-04-18T03:05:49.200727" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:49.200597" elapsed="0.000196"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:49.200577" elapsed="0.000247"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-18T03:05:49.202311" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-18T03:05:49.201761" elapsed="0.000587"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-18T03:05:49.203036" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-18T03:05:49.202604" elapsed="0.000469"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-18T03:05:49.203136" elapsed="0.000049"/>
</return>
<msg time="2026-04-18T03:05:49.203364" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-18T03:05:49.201160" elapsed="0.002238"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:49.211763" elapsed="0.000024"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:49.211595" elapsed="0.000243"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:49.211562" elapsed="0.000400"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:49.213786" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:49.213633" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:49.213606" elapsed="0.000275"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-18T03:05:49.214550" level="INFO">${karaf_connection_index} = 4</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-18T03:05:49.214106" elapsed="0.000483"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-18T03:05:49.215133" level="INFO">${current_connection_index} = 7</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:05:49.214826" elapsed="0.000346"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-18T03:05:49.257087" 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 "b "g "p "c "e "p "- "b "g "p "- "i "n "g "e "s "t "[78C- "[A[78Cm</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-18T03:05:49.215935" elapsed="0.041429"/>
</kw>
<msg time="2026-04-18T03:05:49.257649" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-18T03:05:49.257704" 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 "b "g "p "c "e "p "- "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:49.215418" elapsed="0.042324"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-18T03:05:49.298769" level="INFO">"i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "W "a "i "t "_ "F "o "r "_ "S "t "a "b "l "e "_ "I "p "v "4 "_ "T "o "p "o "l "o "g "y "_ "A "f "t "e "r "_ "T "a "l "k "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-04-18T03:05:49.258480" elapsed="0.040554"/>
</kw>
<msg time="2026-04-18T03:05:49.299307" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-18T03:05:49.299369" level="INFO">${message_wait} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "W "a "i "t "_ "F "o "...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:49.258012" elapsed="0.041408"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.299989" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:49.299586" elapsed="0.000478"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:49.299518" elapsed="0.000581"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:49.300788" level="INFO"> "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "W "a "i "t "_ "F "o "r "_ "S "t "a "b "l "e "_ "I "p "v "4 "_ "T "o "p "o "l "o "g "y "_ "A "f "t "e "r "_ "T "a "l "k "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-04-18T03:05:49.300300" elapsed="0.000596"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.301279" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:49.300983" elapsed="0.000366"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:49.300958" elapsed="0.000449"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-18T03:05:49.301457" elapsed="0.000050"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:05:49.306516" elapsed="0.000259"/>
</kw>
<msg time="2026-04-18T03:05:49.306877" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:49.304254" elapsed="0.002821"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.307419" elapsed="0.000084"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.308036" elapsed="0.000081"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-18T03:05:49.303019" elapsed="0.005227"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-18T03:05:49.301910" elapsed="0.006406"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-18T03:05:49.213136" elapsed="0.095293"/>
</kw>
<msg time="2026-04-18T03:05:49.308559" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:05:49.308607" level="INFO">${message} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "W "a "i "t "_ "F "o "...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:49.212217" elapsed="0.096429"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:05:49.308892" elapsed="0.000031"/>
</return>
<status status="PASS" start="2026-04-18T03:05:49.308747" elapsed="0.000282"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:49.308719" elapsed="0.000339"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.309599" 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-04-18T03:05:49.309964" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:05:49.310036" elapsed="0.000017"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-18T03:05:49.211062" elapsed="0.099089"/>
</kw>
<msg time="2026-04-18T03:05:49.310255" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:05:49.310301" level="INFO">${output} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "W "a "i "t "_ "F "o "...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:49.203964" elapsed="0.106375"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.310718" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:49.310420" elapsed="0.000353"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:49.310401" elapsed="0.000396"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-18T03:05:49.203743" elapsed="0.107079"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-18T03:05:49.203478" elapsed="0.107380"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-18T03:05:49.200155" elapsed="0.110763"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-18T03:05:49.194413" elapsed="0.116564"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:49.193868" elapsed="0.117157"/>
</kw>
<doc>Test case setup which skips on previous failure. If not, logs test case name to Karaf log.
Recommended to be used as the default test case setup.</doc>
<status status="PASS" start="2026-04-18T03:05:49.189963" elapsed="0.121117"/>
</kw>
<kw name="Wait_For_Change_Count_To_Become_Stable" owner="ChangeCounter">
<kw name="Create_Limiting_Stability_Safe_Stateful_Validator_From_Value_To_Overcome" owner="WaitUtils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:49.325206" level="INFO">${valid_minimum} = 2</msg>
<var>${valid_minimum}</var>
<arg>str(int(${maximum_invalid}) + 1)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:49.324756" elapsed="0.000484"/>
</kw>
<kw name="Closure_From_Keyword_And_Arguments" owner="ScalarClosures">
<return>
<value>${keyword}</value>
<value>${args}</value>
<value>${kwargs}</value>
<status status="PASS" start="2026-04-18T03:05:49.325836" elapsed="0.000042"/>
</return>
<msg time="2026-04-18T03:05:49.326069" level="INFO">${validator} = ['WaitUtils.Limiting_Stability_Safe_Stateful_Validator_As_Keyword', ['state_holder', 'data_holder'], {'valid_minimum': '2'}]</msg>
<var>${validator}</var>
<arg>WaitUtils.Limiting_Stability_Safe_Stateful_Validator_As_Keyword</arg>
<arg>state_holder</arg>
<arg>data_holder</arg>
<arg>valid_minimum=${valid_minimum}</arg>
<doc>Turn keyword with given arguments into a scalar closure.</doc>
<status status="PASS" start="2026-04-18T03:05:49.325508" elapsed="0.000587"/>
</kw>
<return>
<value>${validator}</value>
<status status="PASS" start="2026-04-18T03:05:49.326148" elapsed="0.000026"/>
</return>
<msg time="2026-04-18T03:05:49.326296" level="INFO">${validator} = ['WaitUtils.Limiting_Stability_Safe_Stateful_Validator_As_Keyword', ['state_holder', 'data_holder'], {'valid_minimum': '2'}]</msg>
<var>${validator}</var>
<arg>maximum_invalid=${count_to_overcome}</arg>
<doc>Helper function to use if maximum invalid value (instead of minimum valid) is known.</doc>
<status status="PASS" start="2026-04-18T03:05:49.324339" elapsed="0.001983"/>
</kw>
<kw name="Wait_For_Getter_Error_Or_Safe_Stateful_Validator_Consecutive_Success" owner="WaitUtils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:49.327762" level="INFO">${tmp} = 1</msg>
<var>${tmp}</var>
<arg>int(${count})</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:49.327389" elapsed="0.000400"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:49.328239" level="INFO">count=1</msg>
<arg>count=${tmp}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:49.327957" elapsed="0.000327"/>
</kw>
<kw name="WaitUtils__Check_Sanity_And_Compute_Derived_Times" owner="WaitUtils">
<if>
<branch type="IF" condition="int(${count}) &lt; 1">
<kw name="Fail" owner="BuiltIn">
<arg>\${count} is ${count} and not at least 1.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.329264" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:49.329026" elapsed="0.000293"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:49.329004" elapsed="0.000341"/>
</if>
<kw name="Convert Time" owner="DateTime">
<msg time="2026-04-18T03:05:49.329861" level="INFO">${period_in_seconds} = 60.0</msg>
<var>${period_in_seconds}</var>
<arg>${period}</arg>
<arg>result_format=number</arg>
<doc>Converts between supported `time formats`.</doc>
<status status="PASS" start="2026-04-18T03:05:49.329572" elapsed="0.000317"/>
</kw>
<if>
<branch type="IF" condition="${period_in_seconds} &lt;= 0.0">
<kw name="Fail" owner="BuiltIn">
<arg>\${period} ${period} has to be positive.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.330185" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:49.329960" elapsed="0.000279"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:49.329942" elapsed="0.000321"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:05:49.330638" level="INFO">${date_now} = 2026-04-18 03:05:49.330</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:05:49.330408" elapsed="0.000256"/>
</kw>
<kw name="Convert Time" owner="DateTime">
<msg time="2026-04-18T03:05:49.331151" level="INFO">${timeout_in_seconds} = 735.0</msg>
<var>${timeout_in_seconds}</var>
<arg>${timeout}</arg>
<arg>result_format=number</arg>
<doc>Converts between supported `time formats`.</doc>
<status status="PASS" start="2026-04-18T03:05:49.330900" elapsed="0.000277"/>
</kw>
<kw name="Add Time To Date" owner="DateTime">
<msg time="2026-04-18T03:05:49.335457" level="INFO">${date_deadline} = 2026-04-18 03:18:04.330</msg>
<var>${date_deadline}</var>
<arg>${date_now}</arg>
<arg>${timeout_in_seconds}</arg>
<doc>Adds time to date and returns the resulting date.</doc>
<status status="PASS" start="2026-04-18T03:05:49.331340" elapsed="0.004154"/>
</kw>
<return>
<value>${timeout_in_seconds}</value>
<value>${period_in_seconds}</value>
<value>${date_deadline}</value>
<status status="PASS" start="2026-04-18T03:05:49.335577" elapsed="0.000047"/>
</return>
<msg time="2026-04-18T03:05:49.335856" level="INFO">${timeout_in_seconds} = 735.0</msg>
<msg time="2026-04-18T03:05:49.335903" level="INFO">${period_in_seconds} = 60.0</msg>
<msg time="2026-04-18T03:05:49.335944" level="INFO">${date_deadline} = 2026-04-18 03:18:04.330</msg>
<var>${timeout_in_seconds}</var>
<var>${period_in_seconds}</var>
<var>${date_deadline}</var>
<arg>timeout=${timeout}</arg>
<arg>period=${period}</arg>
<arg>count=${count}</arg>
<doc>Common checks for argument values. Return times in seconds and deadline date implied by timeout time.</doc>
<status status="PASS" start="2026-04-18T03:05:49.328609" elapsed="0.007358"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:49.336700" level="INFO">${maximum_sleeps} = 13</msg>
<var>${maximum_sleeps}</var>
<arg>math.ceil(${timeout_in_seconds} / ${period_in_seconds})</arg>
<arg>modules=math</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:49.336170" elapsed="0.000558"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:49.337186" level="INFO">${result} = No result yet.</msg>
<var>${result}</var>
<arg>No result yet.</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:05:49.336904" elapsed="0.000308"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:49.337764" level="INFO">${state} = 1</msg>
<var>${state}</var>
<arg>${initial_state}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:05:49.337376" elapsed="0.000413"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="Getter_And_Safe_Stateful_Validator_Have_To_Succeed_Consecutively_By_Deadline" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:49.340713" level="INFO">${result} = No result yet.</msg>
<var>${result}</var>
<arg>No result yet.</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:05:49.340220" elapsed="0.000538"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:49.341468" level="INFO">${state} = 1</msg>
<var>${state}</var>
<arg>${initial_state}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:05:49.341015" elapsed="0.000499"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:49.342293" level="INFO">${sleeps} = 0</msg>
<var>${sleeps}</var>
<arg>${count} - 1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:49.341782" elapsed="0.000549"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:05:49.344489" level="INFO">${date_now} = 2026-04-18 03:05:49.344</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:05:49.344241" elapsed="0.000316"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:05:49.345392" level="INFO">${time_deadline} = 734.986</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:05:49.344794" elapsed="0.000717"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:49.346266" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:49.345830" elapsed="0.000462"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.346656" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:49.346378" elapsed="0.000334"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:49.346352" elapsed="0.000387"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:05:49.343323" elapsed="0.003470"/>
</kw>
<msg time="2026-04-18T03:05:49.346902" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:05:49.346945" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:49.342605" elapsed="0.004362"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:05:49.347338" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:49.347047" elapsed="0.000344"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:49.347030" elapsed="0.000384"/>
</if>
<for flavor="IN RANGE">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_As_Is" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:49.350583" level="INFO">${keyword} = Get_Change_Count</msg>
<msg time="2026-04-18T03:05:49.350632" level="INFO">${args} = []</msg>
<msg time="2026-04-18T03:05:49.350676" level="INFO">${kwargs} = {}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:05:49.350171" elapsed="0.000528"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Get_Change_Count" owner="ChangeCounter">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:05:49.361830" level="INFO">GET Request : url=http://10.30.170.68:8181/rests/data/data-change-counter:data-change-counter?content=nonconfig 
 path_url=/rests/data/data-change-counter:data-change-counter?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0cikoz8bf13pu14i8fg3ixh1ws0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-18T03:05:49.362247" level="INFO">GET Response : url=http://10.30.170.68:8181/rests/data/data-change-counter:data-change-counter?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '174'} 
 body=&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt; 
 </msg>
<msg time="2026-04-18T03:05:49.362658" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${CC_DATA_CHANGE_COUNTER_URL}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-18T03:05:49.352245" elapsed="0.010524"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:49.368066" level="INFO">&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:49.363291" elapsed="0.005024"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:49.373804" level="FAIL">Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${count}</var>
<arg>json.loads('${response.text}')["data-change-counter:data-change-counter"]["counter"][0]["count"]</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-04-18T03:05:49.368830" elapsed="0.005297">Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<return>
<value>${count}</value>
<status status="NOT RUN" start="2026-04-18T03:05:49.374259" elapsed="0.000031"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>GET data change request, assert status 200, return the value.</doc>
<status status="FAIL" start="2026-04-18T03:05:49.351604" elapsed="0.022869">Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="FAIL" start="2026-04-18T03:05:49.350871" elapsed="0.023683">Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<return>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:05:49.374619" elapsed="0.000016"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure without affecting arguments.</doc>
<status status="FAIL" start="2026-04-18T03:05:49.349792" elapsed="0.024928">Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<msg time="2026-04-18T03:05:49.374847" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:05:49.374892" level="INFO">${message} = Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-chang...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:49.349168" elapsed="0.025751"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:49.375140" elapsed="0.036800"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="NOT RUN" start="2026-04-18T03:05:49.413025" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:49.412885" elapsed="0.000189"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:49.412858" elapsed="0.000240"/>
</if>
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-18T03:05:49.413766" level="FAIL">Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-18T03:05:49.413269" elapsed="0.000599">Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If FAIL is PASS do nothing. Otherwise Fail with Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0).</doc>
<status status="FAIL" start="2026-04-18T03:05:49.412425" elapsed="0.001586">Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:05:49.414078" elapsed="0.000019"/>
</return>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="FAIL" start="2026-04-18T03:05:49.348708" elapsed="0.065540">Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<msg time="2026-04-18T03:05:49.414370" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:05:49.414417" level="INFO">${data} = Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-chang...</msg>
<var>${status}</var>
<var>${data}</var>
<arg>ScalarClosures.Run_Keyword_And_Collect_Garbage</arg>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:49.348059" elapsed="0.066385"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Getter failed: ${data}</value>
<status status="PASS" start="2026-04-18T03:05:49.414662" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-18T03:05:49.414541" elapsed="0.000190"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:49.414505" elapsed="0.000251"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.414928" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:05:49.415070" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:49.415032" elapsed="0.000085"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:05:49.415014" elapsed="0.000127"/>
</if>
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>ScalarClosures.Run_Closure_After_Replacing_First_Two_Arguments</arg>
<arg>${safe_validator}</arg>
<arg>${state}</arg>
<arg>${data}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.415418" elapsed="0.000031"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Validator failed: ${result}</value>
<status status="NOT RUN" start="2026-04-18T03:05:49.415623" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:49.415579" elapsed="0.000094"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:05:49.415552" elapsed="0.000145"/>
</if>
<if>
<branch type="IF" condition="${sleeps_left} &lt;= 0">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:05:49.415785" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:49.415749" elapsed="0.000081"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:05:49.415733" elapsed="0.000119"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.416019" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:05:49.416155" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:49.416120" elapsed="0.000079"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:05:49.416102" elapsed="0.000119"/>
</if>
<kw name="Sleep" owner="BuiltIn">
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.416363" elapsed="0.000020"/>
</kw>
<var name="${sleeps_left}">0</var>
<status status="PASS" start="2026-04-18T03:05:49.347901" elapsed="0.068516"/>
</iter>
<var>${sleeps_left}</var>
<value>${count}-1</value>
<value>-1</value>
<value>-1</value>
<status status="PASS" start="2026-04-18T03:05:49.347461" elapsed="0.068993"/>
</for>
<kw name="Fail" owner="BuiltIn">
<arg>Logic error, we should have returned before.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.416633" elapsed="0.000021"/>
</kw>
<msg time="2026-04-18T03:05:49.416927" level="INFO">${state} = 1</msg>
<msg time="2026-04-18T03:05:49.416979" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:05:49.417022" level="INFO">${result} = Getter failed: Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/count...</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>count=${count}</arg>
<arg>getter=${getter}</arg>
<arg>safe_validator=${safe_validator}</arg>
<arg>initial_state=${state}</arg>
<doc>Pass only if consecutively 1 times in a row with 60 between attempts: ${getter} creates data and ${safe_validator} passes. Validator updates its state even if it reports failure. Always return validator state, status and message.</doc>
<status status="PASS" start="2026-04-18T03:05:49.339100" elapsed="0.077949"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:05:49.417279" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:49.417159" elapsed="0.000164"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:49.417137" elapsed="0.000208"/>
</if>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:05:49.418867" level="INFO">Length is 362.</msg>
<msg time="2026-04-18T03:05:49.418961" level="FAIL">'Getter failed: Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:05:49.418568" elapsed="0.000470">'Getter failed: Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)' should be empty.</status>
</kw>
<msg time="2026-04-18T03:05:49.419223" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:05:49.419269" level="INFO">${result} = 'Getter failed: Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/coun...</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:49.418156" elapsed="0.001139"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:05:49.419486" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:49.419372" elapsed="0.000178"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:49.419352" elapsed="0.000223"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:05:49.420006" level="INFO">@{message_chunks} = [ Getter failed: Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/cou...</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:05:49.419734" elapsed="0.000302"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:05:49.423595" level="INFO">Length is 362.</msg>
<msg time="2026-04-18T03:05:49.423718" level="FAIL">'Getter failed: Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:05:49.420594" elapsed="0.003206">'Getter failed: Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)' should be empty.</status>
</kw>
<msg time="2026-04-18T03:05:49.423961" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:05:49.424026" level="INFO">${result} = 'Getter failed: Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/coun...</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:49.420206" elapsed="0.003860"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:05:49.424374" elapsed="0.000044"/>
</return>
<status status="PASS" start="2026-04-18T03:05:49.424195" elapsed="0.000276"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:49.424159" elapsed="0.000351"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.424823" elapsed="0.000082"/>
</kw>
<arg>${result}</arg>
<arg>Not possible to succeed within the deadline.</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:05:49.417698" elapsed="0.007452"/>
</kw>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:05:49.427304" level="INFO">Length is 362.</msg>
<msg time="2026-04-18T03:05:49.427426" level="FAIL">'Getter failed: Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:05:49.426900" elapsed="0.000650">'Getter failed: Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)' should be empty.</status>
</kw>
<msg time="2026-04-18T03:05:49.427739" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:05:49.427805" level="INFO">${result} = 'Getter failed: Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/coun...</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:49.426325" elapsed="0.001517"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:05:49.428125" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:49.427957" elapsed="0.000235"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:49.427927" elapsed="0.000299"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:05:49.428865" level="INFO">@{message_chunks} = [  | : Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/dat...</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:05:49.428456" elapsed="0.000456"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:05:49.432417" level="INFO">Length is 0.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="PASS" start="2026-04-18T03:05:49.429788" elapsed="0.002684"/>
</kw>
<msg time="2026-04-18T03:05:49.432586" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:05:49.432631" level="INFO">${result} = None</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:49.429165" elapsed="0.003488"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="NOT RUN" start="2026-04-18T03:05:49.432929" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:49.432811" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:49.432787" elapsed="0.000216"/>
</if>
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-18T03:05:49.433506" level="FAIL">Getter failed: Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-18T03:05:49.433168" elapsed="0.000516">Getter failed: Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<arg>${result}</arg>
<arg>Getter failed</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="FAIL" start="2026-04-18T03:05:49.425714" elapsed="0.008103">Getter failed: Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Sleep" owner="BuiltIn">
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.433999" elapsed="0.000022"/>
</kw>
<var name="${try}">1</var>
<status status="FAIL" start="2026-04-18T03:05:49.338254" elapsed="0.095819">Getter failed: Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</iter>
<var>${try}</var>
<value>1</value>
<value>${maximum_sleeps}+2</value>
<status status="FAIL" start="2026-04-18T03:05:49.337855" elapsed="0.096286">Getter failed: Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</for>
<kw name="Fail" owner="BuiltIn">
<arg>Logic error, we should have returned before.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.434316" elapsed="0.000022"/>
</kw>
<var>${result}</var>
<arg>timeout=${timeout}</arg>
<arg>period=${period}</arg>
<arg>count=${repetitions}</arg>
<arg>getter=${ChangeCounter__getter}</arg>
<arg>safe_validator=${validator}</arg>
<arg>initial_state=${count_to_overcome}</arg>
<doc>Analogue of Wait Until Keyword Succeeds, but it passes state of validator around and exits early on getter failure. Calls GASSVHTSCBD to verify data is "stable".</doc>
<status status="FAIL" start="2026-04-18T03:05:49.326692" elapsed="0.107736">Getter failed: Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<return>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:05:49.434500" elapsed="0.000017"/>
</return>
<arg>timeout=${bgp_emptying_timeout}</arg>
<arg>period=${CHECK_PERIOD_CHANGE_COUNT_SINGLE}</arg>
<arg>repetitions=${REPETITIONS_CHANGE_COUNT_SINGLE}</arg>
<arg>count_to_overcome=${last_change_count_single}</arg>
<doc>Each ${period} get count. After 1 of constant value above ${count_to_overcome} within ${timeout}, Return validator output. Fail early on getter error.</doc>
<status status="FAIL" start="2026-04-18T03:05:49.323475" elapsed="0.111144">Getter failed: Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</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-04-18T03:05:49.436029" 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-04-18T03:05:49.435710" elapsed="0.000362"/>
</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-04-18T03:05:49.435314" elapsed="0.000809"/>
</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-04-18T03:05:49.437019" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:49.436613" elapsed="0.000468"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:49.436593" elapsed="0.000513"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>'${SetupUtils__Known_Bug_ID}' != ''</arg>
<arg>Set_Known_Bug_Id</arg>
<arg>${EMPTY}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:49.437261" elapsed="0.000416"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:49.446058" level="INFO">${test_skipped} = False</msg>
<var>${test_skipped}</var>
<arg>len(re.findall('SKIPPED', """${TEST_MESSAGE}""")) &gt; 0</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:49.445204" elapsed="0.000901"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="NOT RUN" start="2026-04-18T03:05:49.446574" elapsed="0.000029"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:49.446241" elapsed="0.000406"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:49.446207" elapsed="0.000475"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:49.447452" level="INFO">${newline} = 
</msg>
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:49.446919" elapsed="0.000578"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-18T03:05:49.448177" level="INFO">${reference} = bgpcep_bgp_ingest_mixed_txt_Singlepeer_Changecount_Wait_For_Stable_Ipv4_Topology_After_Talking</msg>
<var>${reference}</var>
<arg>${SUITE_NAME}_${TEST_NAME}</arg>
<arg>[ /\.-]</arg>
<arg>_</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-18T03:05:49.447771" elapsed="0.000445"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<msg time="2026-04-18T03:05:49.448774" level="INFO">${reference} = bgpcep_bgp_ingest_mixed_txt_singlepeer_changecount_wait_for_stable_ipv4_topology_after_talking</msg>
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="PASS" start="2026-04-18T03:05:49.448463" elapsed="0.000356"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:49.449745" level="INFO">${msg} = ... click for list of related bugs or create a new one if needed (with the
"bgpcep_bgp_ingest_mixed_txt_singlepeer_changecount_wait_for_stable_ipv4_topology_after_talking"
reference somewhere inside)</msg>
<var>${msg}</var>
<arg>... click for list of related bugs or create a new one if needed (with the${newline}"${reference}"${newline}reference somewhere inside)</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:05:49.449104" elapsed="0.000684"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:49.450319" level="INFO">${bugs} = "https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=bgpcep_bgp_ingest_mixed_txt_singlepeer_changecount_wait_for_stable_ipv4_topology_after_talking&amp;order=bug_status"</msg>
<var>${bugs}</var>
<arg>"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=${reference}&amp;order=bug_status"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:05:49.449976" elapsed="0.000378"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<msg time="2026-04-18T03:05:49.451029" level="INFO">Set test message to:
... click for list of related bugs or create a new one if needed (with the
"bgpcep_bgp_ingest_mixed_txt_singlepeer_changecount_wait_for_stable_ipv4_topology_after_talking"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=bgpcep_bgp_ingest_mixed_txt_singlepeer_changecount_wait_for_stable_ipv4_topology_after_talking&amp;order=bug_status"

Getter failed: Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="PASS" start="2026-04-18T03:05:49.450555" elapsed="0.000532"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:49.451581" level="INFO">... click for list of related bugs or create a new one if needed (with the
"bgpcep_bgp_ingest_mixed_txt_singlepeer_changecount_wait_for_stable_ipv4_topology_after_talking"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=bgpcep_bgp_ingest_mixed_txt_singlepeer_changecount_wait_for_stable_ipv4_topology_after_talking&amp;order=bug_status"</msg>
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:49.451252" elapsed="0.000385"/>
</kw>
<doc>Report that a test failed and point to linked Bugzilla bug(s).
Linked bugs must contain the ${reference} inside comments (workaround
becasue of currently missing suitable field for external references and
not correctly working the CONTENT MATCHES filter).
Not FAILED (incl. SKIPPED) test are not reported.
This keyword must be used in the [Teardown] setting of the affected test
or as the first line of the test if FastFail module is not being
used. It reports the URL of the bug on console and also puts it
into the Robot log file.</doc>
<status status="PASS" start="2026-04-18T03:05:49.444565" elapsed="0.007141"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:49.436378" elapsed="0.015394"/>
</kw>
<doc>Test case teardown. Show linked bugs and start fast failing in case of failure.</doc>
<status status="PASS" start="2026-04-18T03:05:49.434981" elapsed="0.016841"/>
</kw>
<doc>Wait until example-ipv4-topology becomes stable again.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-18T03:05:49.189003" elapsed="0.262881">... click for list of related bugs or create a new one if needed (with the
"bgpcep_bgp_ingest_mixed_txt_singlepeer_changecount_wait_for_stable_ipv4_topology_after_talking"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=bgpcep_bgp_ingest_mixed_txt_singlepeer_changecount_wait_for_stable_ipv4_topology_after_talking&amp;order=bug_status"

Getter failed: Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</test>
<test id="s1-s1-t11" name="Check_For_Empty_Ipv4_Topology_After_Talking" line="165">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-18T03:05:49.457240" elapsed="0.000337"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-18T03:05:49.456854" elapsed="0.000859"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:49.459083" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:49.458918" elapsed="0.000227"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:49.458888" 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-04-18T03:05:49.465853" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:49.465692" elapsed="0.000229"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:49.465597" elapsed="0.000357"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-18T03:05:49.467349" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-18T03:05:49.466815" elapsed="0.000570"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-18T03:05:49.468090" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-18T03:05:49.467710" elapsed="0.000413"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-18T03:05:49.468181" elapsed="0.000051"/>
</return>
<msg time="2026-04-18T03:05:49.468397" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-18T03:05:49.466297" elapsed="0.002132"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:49.475609" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:49.475453" elapsed="0.000216"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:49.475427" elapsed="0.000266"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:49.477052" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:49.476938" elapsed="0.000162"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:49.476919" elapsed="0.000204"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-18T03:05:49.477616" level="INFO">${karaf_connection_index} = 4</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-18T03:05:49.477276" elapsed="0.000425"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-18T03:05:49.478108" level="INFO">${current_connection_index} = 7</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:05:49.477878" elapsed="0.000256"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-18T03:05:49.513075" 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 "b "g "p "c "e "p "- "b "g "p "- "i "n "g "e "s "t "[78C- "[A[78Cm</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-18T03:05:49.478665" elapsed="0.034624"/>
</kw>
<msg time="2026-04-18T03:05:49.513511" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-18T03:05:49.513591" 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 "b "g "p "c "e "p "- "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:49.478298" elapsed="0.035332"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-18T03:05:49.552259" level="INFO">"i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "C "h "e "c "k "_ "F "o "r "_ "E "m "p "t "y "_ "I "p "v "4 "_ "T "o "p "o "l "o "g "y "_ "A "f "t "e "r "_ "T "a "l "k "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-04-18T03:05:49.514363" elapsed="0.038227"/>
</kw>
<msg time="2026-04-18T03:05:49.552915" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-18T03:05:49.552981" level="INFO">${message_wait} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "C "h "e "c "k "_ "F "...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:49.513911" elapsed="0.039120"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.553654" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:49.553184" elapsed="0.000552"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:49.553136" elapsed="0.000688"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:49.554570" level="INFO"> "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "C "h "e "c "k "_ "F "o "r "_ "E "m "p "t "y "_ "I "p "v "4 "_ "T "o "p "o "l "o "g "y "_ "A "f "t "e "r "_ "T "a "l "k "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-04-18T03:05:49.554039" elapsed="0.000658"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.555138" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:49.554796" elapsed="0.000424"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:49.554768" elapsed="0.000491"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-18T03:05:49.555318" 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">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:05:49.559063" elapsed="0.000212"/>
</kw>
<msg time="2026-04-18T03:05:49.559370" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:49.557588" elapsed="0.002008"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.560027" elapsed="0.000103"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.560509" elapsed="0.000211"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-18T03:05:49.556670" elapsed="0.004200"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-18T03:05:49.555829" elapsed="0.005134"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-18T03:05:49.476609" elapsed="0.084498"/>
</kw>
<msg time="2026-04-18T03:05:49.561248" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:05:49.561309" level="INFO">${message} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "C "h "e "c "k "_ "F "...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:49.475883" elapsed="0.085480"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:05:49.561692" elapsed="0.000045"/>
</return>
<status status="PASS" start="2026-04-18T03:05:49.561487" elapsed="0.000350"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:49.561454" elapsed="0.000424"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.562545" elapsed="0.000038"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.563050" elapsed="0.000033"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:05:49.563147" 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-04-18T03:05:49.475024" elapsed="0.088271"/>
</kw>
<msg time="2026-04-18T03:05:49.563432" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:05:49.563493" level="INFO">${output} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "C "h "e "c "k "_ "F "...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:49.469039" elapsed="0.094527"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.564063" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:49.563677" elapsed="0.000458"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:49.563651" elapsed="0.000518"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-18T03:05:49.468818" elapsed="0.095387"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-18T03:05:49.468563" elapsed="0.095691"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-18T03:05:49.465096" elapsed="0.099242"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-18T03:05:49.458519" elapsed="0.105904"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:49.457928" elapsed="0.106563"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-18T03:05:49.453434" elapsed="0.111198"/>
</kw>
<kw name="Check_Ipv4_Topology_Is_Empty" owner="PrefixCounting">
<kw name="Check_Ipv4_Topology_Count" owner="PrefixCounting">
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get_Ipv4_Topology_Count" owner="PrefixCounting">
<kw name="Get_Ipv4_Topology" owner="PrefixCounting">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:05:49.576601" level="INFO">GET Request : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0cikoz8bf13pu14i8fg3ixh1ws0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-18T03:05:49.576849" level="INFO">GET Response : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '293'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xmlns="urn:opendaylight:params:xml:ns:yang:odl-bgp-topology-types"/&gt;&lt;/topology-types&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-04-18T03:05:49.577098" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${PC_NW_TOPOLOGY}=${topology}?content=nonconfig</arg>
<arg>expected_status=anything</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-18T03:05:49.569970" elapsed="0.007166"/>
</kw>
<if>
<branch type="IF" condition="${response.status_code} != 200">
<kw name="Fail" owner="BuiltIn">
<arg>Get on ${topology} returned status code ${response.status_code} with message: ${response.text}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.580940" elapsed="0.000039"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:49.577307" elapsed="0.003730"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:49.577254" elapsed="0.003827"/>
</if>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-18T03:05:49.581250" elapsed="0.000062"/>
</return>
<msg time="2026-04-18T03:05:49.584753" level="INFO">${topology} = &lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xml...</msg>
<var>${topology}</var>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>GET the example-ipv4-topology data, check status is 200, return the topology data.</doc>
<status status="PASS" start="2026-04-18T03:05:49.569331" elapsed="0.015470"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:49.585909" level="INFO">${prefix_count} = 0</msg>
<var>${prefix_count}</var>
<arg>len(re.findall('"prefix":"', '''${topology}'''))</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:49.585085" elapsed="0.000866"/>
</kw>
<return>
<value>${prefix_count}</value>
<status status="PASS" start="2026-04-18T03:05:49.586027" elapsed="0.000053"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Get topology. If not fail, return number of prefixes in the topology.</doc>
<status status="PASS" start="2026-04-18T03:05:49.568551" elapsed="0.017682"/>
</kw>
<msg time="2026-04-18T03:05:49.586581" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:05:49.586648" level="INFO">${message} = 0</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:49.567725" elapsed="0.018957"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:49.586930" elapsed="0.042544"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:05:49.630981" elapsed="0.000053"/>
</return>
<status status="PASS" start="2026-04-18T03:05:49.630803" elapsed="0.000284"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:49.630770" elapsed="0.000356"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.631373" elapsed="0.000032"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with 0.</doc>
<status status="PASS" start="2026-04-18T03:05:49.630208" elapsed="0.001281"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:05:49.631571" elapsed="0.000040"/>
</return>
<msg time="2026-04-18T03:05:49.631789" level="INFO">${actual_count} = 0</msg>
<var>${actual_count}</var>
<arg>Get_Ipv4_Topology_Count</arg>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:05:49.566410" elapsed="0.065417"/>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<msg time="2026-04-18T03:05:49.632547" level="INFO">Argument types are:
&lt;class 'int'&gt;
&lt;class 'str'&gt;</msg>
<arg>${actual_count}</arg>
<arg>${expected_count}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="PASS" start="2026-04-18T03:05:49.632067" elapsed="0.000574"/>
</kw>
<arg>0</arg>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>Check that the count of prefixes matches the expected count. Fails if it does not. In either case, collect garbage.</doc>
<status status="PASS" start="2026-04-18T03:05:49.565555" elapsed="0.067171"/>
</kw>
<doc>Example_Ipv4_Topology has to give status 200 with zero prefixes.</doc>
<status status="PASS" start="2026-04-18T03:05:49.564958" elapsed="0.067851"/>
</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">
<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-04-18T03:05:49.633661" elapsed="0.000400"/>
</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-04-18T03:05:49.635239" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:49.634694" elapsed="0.000627"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:49.634667" elapsed="0.000690"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>'${SetupUtils__Known_Bug_ID}' != ''</arg>
<arg>Set_Known_Bug_Id</arg>
<arg>${EMPTY}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:49.635580" elapsed="0.000443"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:49.643522" level="INFO">${test_skipped} = False</msg>
<var>${test_skipped}</var>
<arg>len(re.findall('SKIPPED', """${TEST_MESSAGE}""")) &gt; 0</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:49.642896" elapsed="0.000687"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-04-18T03:05:49.643903" elapsed="0.000049"/>
</return>
<status status="PASS" start="2026-04-18T03:05:49.643699" elapsed="0.000297"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:49.643668" elapsed="0.000363"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.644251" 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-04-18T03:05:49.644503" elapsed="0.000045"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.644764" elapsed="0.000027"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${msg}</var>
<arg>... click for list of related bugs or create a new one if needed (with the${newline}"${reference}"${newline}reference somewhere inside)</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.644996" elapsed="0.000027"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${bugs}</var>
<arg>"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=${reference}&amp;order=bug_status"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.645231" elapsed="0.000027"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.645468" elapsed="0.000135"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.645823" elapsed="0.000028"/>
</kw>
<doc>Report that a test failed and point to linked Bugzilla bug(s).
Linked bugs must contain the ${reference} inside comments (workaround
becasue of currently missing suitable field for external references and
not correctly working the CONTENT MATCHES filter).
Not FAILED (incl. SKIPPED) test are not reported.
This keyword must be used in the [Teardown] setting of the affected test
or as the first line of the test if FastFail module is not being
used. It reports the URL of the bug on console and also puts it
into the Robot log file.</doc>
<status status="PASS" start="2026-04-18T03:05:49.642346" elapsed="0.003639"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:49.634393" elapsed="0.011666"/>
</kw>
<doc>Test case teardown. Show linked bugs and start fast failing in case of failure.</doc>
<status status="PASS" start="2026-04-18T03:05:49.633200" elapsed="0.012919"/>
</kw>
<doc>Example-ipv4-topology should be empty now.</doc>
<tag>critical</tag>
<status status="PASS" start="2026-04-18T03:05:49.452641" elapsed="0.193536"/>
</test>
<test id="s1-s1-t12" name="Start_Listening_BGP_Speaker" line="171">
<kw name="Setup_Test_With_Logging_And_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Fail_This_Fast_On_Previous_Error" owner="FailFast">
<if>
<branch type="IF" condition="'''${SuiteFastFail}'''=='True'">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-18T03:05:49.652029" level="FAIL">SKIPPED due to a failure in a previous fundamental test case.</msg>
<arg>SKIPPED due to a failure in a previous fundamental test case.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-18T03:05:49.651558" elapsed="0.000571">SKIPPED due to a failure in a previous fundamental test case.</status>
</kw>
<status status="FAIL" start="2026-04-18T03:05:49.651200" elapsed="0.001023">SKIPPED due to a failure in a previous fundamental test case.</status>
</branch>
<status status="FAIL" start="2026-04-18T03:05:49.651171" elapsed="0.001098">SKIPPED due to a failure in a previous fundamental test case.</status>
</if>
<doc>Mark (immediately) this test case as failed when fast-fail is enabled in suite.</doc>
<status status="FAIL" start="2026-04-18T03:05:49.650935" elapsed="0.001456">SKIPPED due to a failure in a previous fundamental test case.</status>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<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="NOT RUN" start="2026-04-18T03:05:49.652648" elapsed="0.000030"/>
</kw>
<doc>Test case setup which skips on previous failure. If not, logs test case name to Karaf log.
Recommended to be used as the default test case setup.</doc>
<status status="FAIL" start="2026-04-18T03:05:49.647303" elapsed="0.005491">SKIPPED due to a failure in a previous fundamental test case.</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-04-18T03:05:49.654659" 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-04-18T03:05:49.654216" elapsed="0.000505"/>
</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-04-18T03:05:49.653643" elapsed="0.001144"/>
</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-04-18T03:05:49.656097" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:49.655424" elapsed="0.000751"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:49.655397" elapsed="0.000810"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>'${SetupUtils__Known_Bug_ID}' != ''</arg>
<arg>Set_Known_Bug_Id</arg>
<arg>${EMPTY}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:49.656434" elapsed="0.000427"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:49.664209" level="INFO">${test_skipped} = True</msg>
<var>${test_skipped}</var>
<arg>len(re.findall('SKIPPED', """${TEST_MESSAGE}""")) &gt; 0</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:49.663439" elapsed="0.000816"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-04-18T03:05:49.664623" elapsed="0.000049"/>
</return>
<status status="PASS" start="2026-04-18T03:05:49.664392" elapsed="0.000326"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:49.664340" elapsed="0.000412"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.664976" 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-04-18T03:05:49.665243" elapsed="0.000030"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.665500" elapsed="0.000047"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${msg}</var>
<arg>... click for list of related bugs or create a new one if needed (with the${newline}"${reference}"${newline}reference somewhere inside)</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.665783" elapsed="0.000030"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${bugs}</var>
<arg>"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=${reference}&amp;order=bug_status"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.666053" elapsed="0.000030"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.666305" elapsed="0.000028"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.666612" elapsed="0.000030"/>
</kw>
<doc>Report that a test failed and point to linked Bugzilla bug(s).
Linked bugs must contain the ${reference} inside comments (workaround
becasue of currently missing suitable field for external references and
not correctly working the CONTENT MATCHES filter).
Not FAILED (incl. SKIPPED) test are not reported.
This keyword must be used in the [Teardown] setting of the affected test
or as the first line of the test if FastFail module is not being
used. It reports the URL of the bug on console and also puts it
into the Robot log file.</doc>
<status status="PASS" start="2026-04-18T03:05:49.662852" elapsed="0.003871"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:49.655141" elapsed="0.011752"/>
</kw>
<doc>Test case teardown. Show linked bugs and start fast failing in case of failure.</doc>
<status status="PASS" start="2026-04-18T03:05:49.653200" elapsed="0.013761"/>
</kw>
<doc>Start Python speaker in listening mode.</doc>
<status status="FAIL" start="2026-04-18T03:05:49.646641" elapsed="0.020381">Setup failed:
SKIPPED due to a failure in a previous fundamental test case.</status>
</test>
<test id="s1-s1-t13" name="Reconfigure_ODL_To_Initiate_Connection" line="176">
<kw name="Setup_Test_With_Logging_And_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Fail_This_Fast_On_Previous_Error" owner="FailFast">
<if>
<branch type="IF" condition="'''${SuiteFastFail}'''=='True'">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-18T03:05:49.672749" level="FAIL">SKIPPED due to a failure in a previous fundamental test case.</msg>
<arg>SKIPPED due to a failure in a previous fundamental test case.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-18T03:05:49.672277" elapsed="0.000584">SKIPPED due to a failure in a previous fundamental test case.</status>
</kw>
<status status="FAIL" start="2026-04-18T03:05:49.671935" elapsed="0.001029">SKIPPED due to a failure in a previous fundamental test case.</status>
</branch>
<status status="FAIL" start="2026-04-18T03:05:49.671907" elapsed="0.001110">SKIPPED due to a failure in a previous fundamental test case.</status>
</if>
<doc>Mark (immediately) this test case as failed when fast-fail is enabled in suite.</doc>
<status status="FAIL" start="2026-04-18T03:05:49.671642" elapsed="0.001516">SKIPPED due to a failure in a previous fundamental test case.</status>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<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="NOT RUN" start="2026-04-18T03:05:49.673434" elapsed="0.000031"/>
</kw>
<doc>Test case setup which skips on previous failure. If not, logs test case name to Karaf log.
Recommended to be used as the default test case setup.</doc>
<status status="FAIL" start="2026-04-18T03:05:49.668115" elapsed="0.005485">SKIPPED due to a failure in a previous fundamental test case.</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-04-18T03:05:49.675620" 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-04-18T03:05:49.675121" elapsed="0.000568"/>
</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-04-18T03:05:49.674568" elapsed="0.001192"/>
</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-04-18T03:05:49.677055" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:49.676482" elapsed="0.000661"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:49.676455" elapsed="0.000724"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>'${SetupUtils__Known_Bug_ID}' != ''</arg>
<arg>Set_Known_Bug_Id</arg>
<arg>${EMPTY}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:49.677401" elapsed="0.000486"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:49.683138" level="INFO">${test_skipped} = True</msg>
<var>${test_skipped}</var>
<arg>len(re.findall('SKIPPED', """${TEST_MESSAGE}""")) &gt; 0</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:49.682697" elapsed="0.000470"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-04-18T03:05:49.683397" elapsed="0.000037"/>
</return>
<status status="PASS" start="2026-04-18T03:05:49.683244" elapsed="0.000222"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:49.683223" elapsed="0.000267"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.683665" elapsed="0.000022"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<var>${reference}</var>
<arg>${SUITE_NAME}_${TEST_NAME}</arg>
<arg>[ /\.-]</arg>
<arg>_</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.683847" elapsed="0.000020"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.684024" elapsed="0.000020"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${msg}</var>
<arg>... click for list of related bugs or create a new one if needed (with the${newline}"${reference}"${newline}reference somewhere inside)</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.684196" elapsed="0.000020"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${bugs}</var>
<arg>"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=${reference}&amp;order=bug_status"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.684367" elapsed="0.000020"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.684554" elapsed="0.000022"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.684745" elapsed="0.000025"/>
</kw>
<doc>Report that a test failed and point to linked Bugzilla bug(s).
Linked bugs must contain the ${reference} inside comments (workaround
becasue of currently missing suitable field for external references and
not correctly working the CONTENT MATCHES filter).
Not FAILED (incl. SKIPPED) test are not reported.
This keyword must be used in the [Teardown] setting of the affected test
or as the first line of the test if FastFail module is not being
used. It reports the URL of the bug on console and also puts it
into the Robot log file.</doc>
<status status="PASS" start="2026-04-18T03:05:49.682357" elapsed="0.002478"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:49.676118" elapsed="0.008770"/>
</kw>
<doc>Test case teardown. Show linked bugs and start fast failing in case of failure.</doc>
<status status="PASS" start="2026-04-18T03:05:49.674029" elapsed="0.010903"/>
</kw>
<doc>Replace BGP peer config module, now with initiate-connection set to true.</doc>
<status status="FAIL" start="2026-04-18T03:05:49.667333" elapsed="0.017644">Setup failed:
SKIPPED due to a failure in a previous fundamental test case.</status>
</test>
<test id="s1-s1-t14" name="Wait_For_Stable_Listening_Ipv4_Topology" line="192">
<kw name="Setup_Test_With_Logging_And_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Fail_This_Fast_On_Previous_Error" owner="FailFast">
<if>
<branch type="IF" condition="'''${SuiteFastFail}'''=='True'">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-18T03:05:49.689016" level="FAIL">SKIPPED due to a failure in a previous fundamental test case.</msg>
<arg>SKIPPED due to a failure in a previous fundamental test case.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-18T03:05:49.688728" elapsed="0.000362">SKIPPED due to a failure in a previous fundamental test case.</status>
</kw>
<status status="FAIL" start="2026-04-18T03:05:49.688483" elapsed="0.000672">SKIPPED due to a failure in a previous fundamental test case.</status>
</branch>
<status status="FAIL" start="2026-04-18T03:05:49.688465" elapsed="0.000723">SKIPPED due to a failure in a previous fundamental test case.</status>
</if>
<doc>Mark (immediately) this test case as failed when fast-fail is enabled in suite.</doc>
<status status="FAIL" start="2026-04-18T03:05:49.688296" elapsed="0.000980">SKIPPED due to a failure in a previous fundamental test case.</status>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<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="NOT RUN" start="2026-04-18T03:05:49.689447" elapsed="0.000021"/>
</kw>
<doc>Test case setup which skips on previous failure. If not, logs test case name to Karaf log.
Recommended to be used as the default test case setup.</doc>
<status status="FAIL" start="2026-04-18T03:05:49.685795" elapsed="0.003779">SKIPPED due to a failure in a previous fundamental test case.</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-04-18T03:05:49.690915" 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-04-18T03:05:49.690584" elapsed="0.000375"/>
</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-04-18T03:05:49.690194" elapsed="0.000817"/>
</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-04-18T03:05:49.691975" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:49.691459" elapsed="0.000579"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:49.691440" elapsed="0.000624"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>'${SetupUtils__Known_Bug_ID}' != ''</arg>
<arg>Set_Known_Bug_Id</arg>
<arg>${EMPTY}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:49.692298" elapsed="0.000345"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:49.697724" level="INFO">${test_skipped} = True</msg>
<var>${test_skipped}</var>
<arg>len(re.findall('SKIPPED', """${TEST_MESSAGE}""")) &gt; 0</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:49.697300" elapsed="0.000452"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-04-18T03:05:49.697998" elapsed="0.000039"/>
</return>
<status status="PASS" start="2026-04-18T03:05:49.697826" elapsed="0.000246"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:49.697807" elapsed="0.000289"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.698417" elapsed="0.000021"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<var>${reference}</var>
<arg>${SUITE_NAME}_${TEST_NAME}</arg>
<arg>[ /\.-]</arg>
<arg>_</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.698608" elapsed="0.000021"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.698786" elapsed="0.000020"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${msg}</var>
<arg>... click for list of related bugs or create a new one if needed (with the${newline}"${reference}"${newline}reference somewhere inside)</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.698956" elapsed="0.000019"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${bugs}</var>
<arg>"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=${reference}&amp;order=bug_status"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.699127" elapsed="0.000019"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.699296" elapsed="0.000020"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.699465" elapsed="0.000020"/>
</kw>
<doc>Report that a test failed and point to linked Bugzilla bug(s).
Linked bugs must contain the ${reference} inside comments (workaround
becasue of currently missing suitable field for external references and
not correctly working the CONTENT MATCHES filter).
Not FAILED (incl. SKIPPED) test are not reported.
This keyword must be used in the [Teardown] setting of the affected test
or as the first line of the test if FastFail module is not being
used. It reports the URL of the bug on console and also puts it
into the Robot log file.</doc>
<status status="PASS" start="2026-04-18T03:05:49.696989" elapsed="0.002568"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:49.691243" elapsed="0.008367"/>
</kw>
<doc>Test case teardown. Show linked bugs and start fast failing in case of failure.</doc>
<status status="PASS" start="2026-04-18T03:05:49.689864" elapsed="0.009788"/>
</kw>
<doc>Wait until example-ipv4-topology becomes stable.</doc>
<status status="FAIL" start="2026-04-18T03:05:49.685273" elapsed="0.014417">Setup failed:
SKIPPED due to a failure in a previous fundamental test case.</status>
</test>
<test id="s1-s1-t15" name="Check_Listening_Ipv4_Topology_Count" 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-04-18T03:05:49.703410" elapsed="0.000242"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-18T03:05:49.703080" elapsed="0.000628"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:49.704729" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:49.704614" elapsed="0.000162"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:49.704595" 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-04-18T03:05:49.709746" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:49.709638" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:49.709619" elapsed="0.000196"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-18T03:05:49.710891" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-18T03:05:49.710482" elapsed="0.000437"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-18T03:05:49.711386" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-18T03:05:49.711087" elapsed="0.000324"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-18T03:05:49.711456" elapsed="0.000034"/>
</return>
<msg time="2026-04-18T03:05:49.711634" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-18T03:05:49.710097" elapsed="0.001562"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:49.717127" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:49.717018" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:49.716999" elapsed="0.000197"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:49.718435" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:49.718327" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:49.718309" elapsed="0.000194"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-18T03:05:49.718992" level="INFO">${karaf_connection_index} = 4</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-18T03:05:49.718682" elapsed="0.000338"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-18T03:05:49.719406" level="INFO">${current_connection_index} = 7</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:05:49.719185" elapsed="0.000247"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-18T03:05:49.759257" 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 "b "g "p "c "e "p "- "b "g "p "- "i "n "g "e "s "t "[78C- "[A[78Cm</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-18T03:05:49.719955" elapsed="0.039536"/>
</kw>
<msg time="2026-04-18T03:05:49.759764" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-18T03:05:49.759814" 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 "b "g "p "c "e "p "- "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:49.719612" elapsed="0.040241"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-18T03:05:49.804324" level="INFO">"i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "C "h "e "c "k "_ "L "i "s "t "e "n "i "n "g "_ "I "p "v "4 "_ "T "o "p "o "l "o "g "y "_ "C "o "u "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-04-18T03:05:49.760837" elapsed="0.043718"/>
</kw>
<msg time="2026-04-18T03:05:49.804777" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-18T03:05:49.804824" level="INFO">${message_wait} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "C "h "e "c "k "_ "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-04-18T03:05:49.760108" elapsed="0.044754"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.805279" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:49.804971" elapsed="0.000368"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:49.804939" elapsed="0.000427"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:49.805901" level="INFO"> "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "C "h "e "c "k "_ "L "i "s "t "e "n "i "n "g "_ "I "p "v "4 "_ "T "o "p "o "l "o "g "y "_ "C "o "u "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-04-18T03:05:49.805518" elapsed="0.000464"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.806319" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:49.806051" elapsed="0.000412"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:49.806032" elapsed="0.000456"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-18T03:05:49.806542" elapsed="0.000041"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:05:49.809163" elapsed="0.000293"/>
</kw>
<msg time="2026-04-18T03:05:49.809517" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:49.808126" elapsed="0.001646"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.810067" elapsed="0.000101"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.810447" elapsed="0.000076"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-18T03:05:49.807455" elapsed="0.003199"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-18T03:05:49.806876" elapsed="0.003842"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-18T03:05:49.717992" elapsed="0.092826"/>
</kw>
<msg time="2026-04-18T03:05:49.810919" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:05:49.810962" level="INFO">${message} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "C "h "e "c "k "_ "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-04-18T03:05:49.717354" elapsed="0.093646"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:05:49.811196" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-04-18T03:05:49.811087" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:49.811067" elapsed="0.000212"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.811714" elapsed="0.000026"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.812066" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:05:49.812137" elapsed="0.000016"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-18T03:05:49.716675" elapsed="0.095572"/>
</kw>
<msg time="2026-04-18T03:05:49.812343" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:05:49.812388" level="INFO">${output} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "C "h "e "c "k "_ "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-04-18T03:05:49.712045" elapsed="0.100381"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.812774" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:49.812502" elapsed="0.000326"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:49.812484" elapsed="0.000368"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-18T03:05:49.711894" elapsed="0.100982"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-18T03:05:49.711716" elapsed="0.101193"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-18T03:05:49.709261" elapsed="0.103705"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-18T03:05:49.704306" elapsed="0.108717"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:49.703865" elapsed="0.109205"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-18T03:05:49.700661" elapsed="0.112462"/>
</kw>
<kw name="Check_Ipv4_Topology_Count" owner="PrefixCounting">
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get_Ipv4_Topology_Count" owner="PrefixCounting">
<kw name="Get_Ipv4_Topology" owner="PrefixCounting">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:05:49.825667" level="INFO">GET Request : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0cikoz8bf13pu14i8fg3ixh1ws0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-18T03:05:49.825820" level="INFO">GET Response : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '293'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xmlns="urn:opendaylight:params:xml:ns:yang:odl-bgp-topology-types"/&gt;&lt;/topology-types&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-04-18T03:05:49.826054" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${PC_NW_TOPOLOGY}=${topology}?content=nonconfig</arg>
<arg>expected_status=anything</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-18T03:05:49.815959" elapsed="0.010135"/>
</kw>
<if>
<branch type="IF" condition="${response.status_code} != 200">
<kw name="Fail" owner="BuiltIn">
<arg>Get on ${topology} returned status code ${response.status_code} with message: ${response.text}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.830266" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:49.826280" elapsed="0.004079"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:49.826241" elapsed="0.004157"/>
</if>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-18T03:05:49.830454" elapsed="0.000051"/>
</return>
<msg time="2026-04-18T03:05:49.833951" level="INFO">${topology} = &lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xml...</msg>
<var>${topology}</var>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>GET the example-ipv4-topology data, check status is 200, return the topology data.</doc>
<status status="PASS" start="2026-04-18T03:05:49.815472" elapsed="0.018531"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:49.835002" level="INFO">${prefix_count} = 0</msg>
<var>${prefix_count}</var>
<arg>len(re.findall('"prefix":"', '''${topology}'''))</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:49.834335" elapsed="0.000695"/>
</kw>
<return>
<value>${prefix_count}</value>
<status status="PASS" start="2026-04-18T03:05:49.835082" elapsed="0.000030"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Get topology. If not fail, return number of prefixes in the topology.</doc>
<status status="PASS" start="2026-04-18T03:05:49.814950" elapsed="0.020262"/>
</kw>
<msg time="2026-04-18T03:05:49.835315" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:05:49.835366" level="INFO">${message} = 0</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:49.814433" elapsed="0.020961"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:49.835588" elapsed="0.025232"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:05:49.861824" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-04-18T03:05:49.861691" elapsed="0.000202"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:49.861668" elapsed="0.000251"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.862088" elapsed="0.000023"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with 0.</doc>
<status status="PASS" start="2026-04-18T03:05:49.861255" elapsed="0.000915"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:05:49.862215" elapsed="0.000049"/>
</return>
<msg time="2026-04-18T03:05:49.862395" level="INFO">${actual_count} = 0</msg>
<var>${actual_count}</var>
<arg>Get_Ipv4_Topology_Count</arg>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:05:49.813880" elapsed="0.048542"/>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<msg time="2026-04-18T03:05:49.862937" level="INFO">Argument types are:
&lt;class 'int'&gt;
&lt;class 'str'&gt;</msg>
<msg time="2026-04-18T03:05:49.863041" level="FAIL">0 != 250000</msg>
<arg>${actual_count}</arg>
<arg>${expected_count}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="FAIL" start="2026-04-18T03:05:49.862602" elapsed="0.000509">0 != 250000</status>
</kw>
<arg>${COUNT_CHANGE_COUNT_SINGLE}</arg>
<doc>Check that the count of prefixes matches the expected count. Fails if it does not. In either case, collect garbage.</doc>
<status status="FAIL" start="2026-04-18T03:05:49.813344" elapsed="0.049871">0 != 250000</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-04-18T03:05:49.864564" 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-04-18T03:05:49.864232" elapsed="0.000377"/>
</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-04-18T03:05:49.863859" elapsed="0.000802"/>
</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-04-18T03:05:49.865543" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:49.865140" elapsed="0.000466"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:49.865122" elapsed="0.000509"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>'${SetupUtils__Known_Bug_ID}' != ''</arg>
<arg>Set_Known_Bug_Id</arg>
<arg>${EMPTY}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:49.865783" elapsed="0.000328"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:49.871340" level="INFO">${test_skipped} = False</msg>
<var>${test_skipped}</var>
<arg>len(re.findall('SKIPPED', """${TEST_MESSAGE}""")) &gt; 0</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:49.870922" elapsed="0.000446"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="NOT RUN" start="2026-04-18T03:05:49.871605" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:49.871443" elapsed="0.000205"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:49.871424" elapsed="0.000245"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:49.872121" level="INFO">${newline} = 
</msg>
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:49.871821" elapsed="0.000327"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-18T03:05:49.872675" level="INFO">${reference} = bgpcep_bgp_ingest_mixed_txt_Singlepeer_Changecount_Check_Listening_Ipv4_Topology_Count</msg>
<var>${reference}</var>
<arg>${SUITE_NAME}_${TEST_NAME}</arg>
<arg>[ /\.-]</arg>
<arg>_</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-18T03:05:49.872310" elapsed="0.000392"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<msg time="2026-04-18T03:05:49.873042" level="INFO">${reference} = bgpcep_bgp_ingest_mixed_txt_singlepeer_changecount_check_listening_ipv4_topology_count</msg>
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="PASS" start="2026-04-18T03:05:49.872867" elapsed="0.000201"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:49.873587" level="INFO">${msg} = ... click for list of related bugs or create a new one if needed (with the
"bgpcep_bgp_ingest_mixed_txt_singlepeer_changecount_check_listening_ipv4_topology_count"
reference somewhere inside)</msg>
<var>${msg}</var>
<arg>... click for list of related bugs or create a new one if needed (with the${newline}"${reference}"${newline}reference somewhere inside)</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:05:49.873225" elapsed="0.000389"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:49.874091" level="INFO">${bugs} = "https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=bgpcep_bgp_ingest_mixed_txt_singlepeer_changecount_check_listening_ipv4_topology_count&amp;order=bug_status"</msg>
<var>${bugs}</var>
<arg>"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=${reference}&amp;order=bug_status"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:05:49.873776" elapsed="0.000343"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<msg time="2026-04-18T03:05:49.874801" level="INFO">Set test message to:
... click for list of related bugs or create a new one if needed (with the
"bgpcep_bgp_ingest_mixed_txt_singlepeer_changecount_check_listening_ipv4_topology_count"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=bgpcep_bgp_ingest_mixed_txt_singlepeer_changecount_check_listening_ipv4_topology_count&amp;order=bug_status"

0 != 250000</msg>
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="PASS" start="2026-04-18T03:05:49.874330" elapsed="0.000522"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:49.875314" level="INFO">... click for list of related bugs or create a new one if needed (with the
"bgpcep_bgp_ingest_mixed_txt_singlepeer_changecount_check_listening_ipv4_topology_count"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=bgpcep_bgp_ingest_mixed_txt_singlepeer_changecount_check_listening_ipv4_topology_count&amp;order=bug_status"</msg>
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:49.875015" elapsed="0.000348"/>
</kw>
<doc>Report that a test failed and point to linked Bugzilla bug(s).
Linked bugs must contain the ${reference} inside comments (workaround
becasue of currently missing suitable field for external references and
not correctly working the CONTENT MATCHES filter).
Not FAILED (incl. SKIPPED) test are not reported.
This keyword must be used in the [Teardown] setting of the affected test
or as the first line of the test if FastFail module is not being
used. It reports the URL of the bug on console and also puts it
into the Robot log file.</doc>
<status status="PASS" start="2026-04-18T03:05:49.870604" elapsed="0.004815"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:49.864884" elapsed="0.010585"/>
</kw>
<doc>Test case teardown. Show linked bugs and start fast failing in case of failure.</doc>
<status status="PASS" start="2026-04-18T03:05:49.863541" elapsed="0.011971"/>
</kw>
<doc>Count the routes in example-ipv4-topology and fail if the count is not correct.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-18T03:05:49.699910" elapsed="0.175695">... click for list of related bugs or create a new one if needed (with the
"bgpcep_bgp_ingest_mixed_txt_singlepeer_changecount_check_listening_ipv4_topology_count"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=bgpcep_bgp_ingest_mixed_txt_singlepeer_changecount_check_listening_ipv4_topology_count&amp;order=bug_status"

0 != 250000</status>
</test>
<test id="s1-s1-t16" name="Kill_Listening_BGP_Speaker" line="206">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-18T03:05:49.879036" elapsed="0.000209"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-18T03:05:49.878768" 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-04-18T03:05:49.880301" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:49.880188" elapsed="0.000160"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:49.880168" 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-04-18T03:05:49.885436" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:49.885313" elapsed="0.000177"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:49.885292" elapsed="0.000222"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-18T03:05:49.886680" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-18T03:05:49.886184" elapsed="0.000526"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-18T03:05:49.887184" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-18T03:05:49.886880" elapsed="0.000330"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-18T03:05:49.887255" elapsed="0.000037"/>
</return>
<msg time="2026-04-18T03:05:49.887419" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-18T03:05:49.885792" elapsed="0.001652"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:49.893217" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:49.893107" elapsed="0.000235"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:49.893088" elapsed="0.000282"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:49.894622" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:49.894487" elapsed="0.000182"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:49.894468" elapsed="0.000223"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-18T03:05:49.895148" level="INFO">${karaf_connection_index} = 4</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-18T03:05:49.894844" elapsed="0.000331"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-18T03:05:49.895579" level="INFO">${current_connection_index} = 7</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:05:49.895342" elapsed="0.000263"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-18T03:05:49.930122" 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 "b "g "p "c "e "p "- "b "g "p "- "i "n "g "e "s "t "[78C- "[A[78Cm</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-18T03:05:49.896113" elapsed="0.034244"/>
</kw>
<msg time="2026-04-18T03:05:49.930602" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-18T03:05:49.930652" 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 "b "g "p "c "e "p "- "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:49.895771" elapsed="0.034919"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-18T03:05:49.964794" level="INFO">"i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "K "i "l "l "_ "L "i "s "t "e "n "i "n "g "_ "B "G "P "_ "S "p "e "a "k "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-18T03:05:49.931361" elapsed="0.033646"/>
</kw>
<msg time="2026-04-18T03:05:49.965228" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-18T03:05:49.965278" level="INFO">${message_wait} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "K "i "l "l "_ "L "i "...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:49.930931" elapsed="0.034386"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.965790" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:49.965433" elapsed="0.000419"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:49.965399" elapsed="0.000481"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:49.966482" level="INFO"> "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "K "i "l "l "_ "L "i "s "t "e "n "i "n "g "_ "B "G "P "_ "S "p "e "a "k "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:49.966045" elapsed="0.000544"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.966903" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:49.966666" elapsed="0.000293"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:49.966645" elapsed="0.000340"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-18T03:05:49.967023" elapsed="0.000040"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:05:49.970642" elapsed="0.000225"/>
</kw>
<msg time="2026-04-18T03:05:49.970959" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:49.969074" elapsed="0.002074"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.971576" elapsed="0.000102"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.972047" elapsed="0.000100"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-18T03:05:49.968134" elapsed="0.004163"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-18T03:05:49.967352" elapsed="0.005037"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-18T03:05:49.894162" elapsed="0.078399"/>
</kw>
<msg time="2026-04-18T03:05:49.972702" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:05:49.972765" level="INFO">${message} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "K "i "l "l "_ "L "i "...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:49.893548" elapsed="0.079277"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:05:49.973087" elapsed="0.000038"/>
</return>
<status status="PASS" start="2026-04-18T03:05:49.972937" elapsed="0.000302"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:49.972909" elapsed="0.000374"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.973901" 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-04-18T03:05:49.974448" elapsed="0.000036"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:05:49.974568" 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-04-18T03:05:49.892768" elapsed="0.081953"/>
</kw>
<msg time="2026-04-18T03:05:49.974851" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:05:49.974927" level="INFO">${output} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "K "i "l "l "_ "L "i "...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:49.887852" elapsed="0.087142"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.975469" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:49.975108" elapsed="0.000453"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:49.975082" elapsed="0.000514"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-18T03:05:49.887699" elapsed="0.087930"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-18T03:05:49.887503" elapsed="0.088169"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-18T03:05:49.884895" elapsed="0.090856"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-18T03:05:49.879901" elapsed="0.095931"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:49.879451" elapsed="0.096449"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-18T03:05:49.876565" elapsed="0.099410"/>
</kw>
<kw name="Store_Change_Count">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get_Change_Count" owner="ChangeCounter">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:05:49.986196" level="INFO">GET Request : url=http://10.30.170.68:8181/rests/data/data-change-counter:data-change-counter?content=nonconfig 
 path_url=/rests/data/data-change-counter:data-change-counter?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0cikoz8bf13pu14i8fg3ixh1ws0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-18T03:05:49.986340" level="INFO">GET Response : url=http://10.30.170.68:8181/rests/data/data-change-counter:data-change-counter?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '174'} 
 body=&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt; 
 </msg>
<msg time="2026-04-18T03:05:49.986515" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${CC_DATA_CHANGE_COUNTER_URL}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-18T03:05:49.978074" elapsed="0.008493"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:49.989202" level="INFO">&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:49.986754" elapsed="0.002500"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:49.992047" level="FAIL">Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${count}</var>
<arg>json.loads('${response.text}')["data-change-counter:data-change-counter"]["counter"][0]["count"]</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-04-18T03:05:49.989422" elapsed="0.002746">Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<return>
<value>${count}</value>
<status status="NOT RUN" start="2026-04-18T03:05:49.992238" elapsed="0.000022"/>
</return>
<doc>GET data change request, assert status 200, return the value.</doc>
<status status="FAIL" start="2026-04-18T03:05:49.977299" elapsed="0.015060">Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<msg time="2026-04-18T03:05:49.992473" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:05:49.992518" level="INFO">${count} = Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-chang...</msg>
<var>${status}</var>
<var>${count}</var>
<arg>ChangeCounter.Get_Change_Count</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:49.976727" elapsed="0.015887"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${last_change_count_single}</arg>
<arg>${count}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:49.992951" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:49.992700" elapsed="0.000311"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:49.992678" elapsed="0.000359"/>
</if>
<doc>Get the count of changes from BGP change counter. Ignore error or store the value.</doc>
<status status="PASS" start="2026-04-18T03:05:49.976222" elapsed="0.016865"/>
</kw>
<kw name="Kill_BGP_Speaker" owner="BGPSpeaker">
<kw name="Write_Bare_Ctrl_C" owner="RemoteBash">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:49.994331" level="INFO">${ctrl_c} = </msg>
<var>${ctrl_c}</var>
<arg>chr(int(3))</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:49.994008" elapsed="0.000352"/>
</kw>
<kw name="Write Bare" owner="SSHLibrary">
<arg>${ctrl_c}</arg>
<doc>Writes the given ``text`` on the remote machine without appending a newline.</doc>
<status status="PASS" start="2026-04-18T03:05:49.994573" elapsed="0.000279"/>
</kw>
<doc>Construct ctrl+c character and SSH-write it (without endline) to the current SSH connection.
Do not read anything yet.</doc>
<status status="PASS" start="2026-04-18T03:05:49.993731" elapsed="0.001184"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-18T03:05:49.998109" level="INFO">^C[?2004l[?2004h[?2004l
[?2004h[jenkins@releng-35801-190-1-mininet-ovs-217-0 ~]&gt;</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="PASS" start="2026-04-18T03:05:49.995684" elapsed="0.002546"/>
</kw>
<msg time="2026-04-18T03:05:49.998370" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:05:49.998484" level="INFO">${message} =  ^C[?2004l[?2004h[?2004l
[?2004h[jenkins@releng-35801-190-1-mininet-ovs-217-0 ~]&gt;</msg>
<var>${status}</var>
<var>${message}</var>
<arg>SSHLibrary.Read_Until_Prompt</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:49.995152" elapsed="0.003394"/>
</kw>
<kw name="Dump_BGP_Speaker_Logs" owner="BGPSpeaker">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-18T03:05:49.999290" level="INFO">Executing command 'cat play.py.out'.</msg>
<msg time="2026-04-18T03:05:50.012085" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-18T03:05:50.012479" level="INFO">${output_log} = </msg>
<var>${output_log}</var>
<arg>cat ${BGPSpeaker__OUTPUT_LOG}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-18T03:05:49.999145" elapsed="0.013430"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:50.013623" level="INFO"/>
<arg>${output_log}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:50.012980" elapsed="0.000738"/>
</kw>
<doc>Send all output produced by the play.py utility to Robot logs.
This needs to be called if your suite detects play.py crashing and bypasses
Kill_BGP_Speaker in that case otherwise the output of play.py (which most
likely contains clues about why it crashed) will be lost.</doc>
<status status="PASS" start="2026-04-18T03:05:49.998840" elapsed="0.015004"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<status status="PASS" start="2026-04-18T03:05:50.014266" elapsed="0.000072"/>
</return>
<status status="PASS" start="2026-04-18T03:05:50.013997" elapsed="0.000410"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:50.013952" elapsed="0.000615"/>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${message}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.014932" elapsed="0.000046"/>
</kw>
<kw name="Fail" owner="BuiltIn">
<arg>The prompt was not seen within timeout period.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.015307" elapsed="0.000043"/>
</kw>
<doc>Interrupt play.py, fail if no prompt is seen within SSHLibrary timeout.
Also dump the logs with the output the program produced.
This keyword is also suitable for stopping BGP manager.</doc>
<status status="PASS" start="2026-04-18T03:05:49.993372" elapsed="0.022103"/>
</kw>
<kw name="Do_Not_Fail_Fast_From_Now_On" owner="FailFast">
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:50.017330" level="INFO">${SuiteFastFail} = False</msg>
<arg>${SuiteFastFail}</arg>
<arg>False</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-18T03:05:50.016613" elapsed="0.000812"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-04-18T03:05:50.015949" elapsed="0.001633"/>
</kw>
<kw name="Teardown_Test_Show_Bugs_If_Test_Failed" owner="SetupUtils" type="TEARDOWN">
<kw name="SetupUtils__Report_Bugs_Causing_Failure" owner="SetupUtils">
<if>
<branch type="IF" condition="'${SetupUtils__Known_Bug_ID}' != ''">
<kw name="Report Failure Due To Bug" owner="Utils">
<arg>${SetupUtils__Known_Bug_ID}</arg>
<doc>Report that a test failed due to a known Bugzilla bug whose
number is provided as an argument.
Not FAILED (incl. SKIPPED) test are not reported.
This keyword must be used in the [Teardown] setting of the affected test
or as the first line of the test if FastFail module is not being
used. It reports the URL of the bug on console and also puts it
into the Robot log file.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.020448" elapsed="0.000056"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:50.019582" elapsed="0.001039"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:50.019505" elapsed="0.001173"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>'${SetupUtils__Known_Bug_ID}' != ''</arg>
<arg>Set_Known_Bug_Id</arg>
<arg>${EMPTY}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:50.021017" elapsed="0.000898"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:50.028051" level="INFO">${test_skipped} = False</msg>
<var>${test_skipped}</var>
<arg>len(re.findall('SKIPPED', """${TEST_MESSAGE}""")) &gt; 0</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:50.027571" elapsed="0.000511"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-04-18T03:05:50.028323" elapsed="0.000038"/>
</return>
<status status="PASS" start="2026-04-18T03:05:50.028168" elapsed="0.000226"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:50.028144" 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-04-18T03:05:50.028592" elapsed="0.000022"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<var>${reference}</var>
<arg>${SUITE_NAME}_${TEST_NAME}</arg>
<arg>[ /\.-]</arg>
<arg>_</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.028772" elapsed="0.000020"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.028947" elapsed="0.000093"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${msg}</var>
<arg>... click for list of related bugs or create a new one if needed (with the${newline}"${reference}"${newline}reference somewhere inside)</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.029199" elapsed="0.000021"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${bugs}</var>
<arg>"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=${reference}&amp;order=bug_status"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.029370" elapsed="0.000020"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.029556" elapsed="0.000021"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.029727" elapsed="0.000019"/>
</kw>
<doc>Report that a test failed and point to linked Bugzilla bug(s).
Linked bugs must contain the ${reference} inside comments (workaround
becasue of currently missing suitable field for external references and
not correctly working the CONTENT MATCHES filter).
Not FAILED (incl. SKIPPED) test are not reported.
This keyword must be used in the [Teardown] setting of the affected test
or as the first line of the test if FastFail module is not being
used. It reports the URL of the bug on console and also puts it
into the Robot log file.</doc>
<status status="PASS" start="2026-04-18T03:05:50.027203" elapsed="0.002602"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:50.019081" elapsed="0.010775"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-04-18T03:05:50.018160" elapsed="0.011738"/>
</kw>
<doc>Abort the Python speaker. Also, attempt to stop failing fast.</doc>
<tag>critical</tag>
<status status="PASS" start="2026-04-18T03:05:49.875983" elapsed="0.153961"/>
</test>
<test id="s1-s1-t17" name="Store_Results_For_Listening_BGP_Speaker" 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-04-18T03:05:50.033278" elapsed="0.000234"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-18T03:05:50.033012" 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-04-18T03:05:50.034694" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:50.034578" elapsed="0.000164"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:50.034557" 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-04-18T03:05:50.039721" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:50.039613" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:50.039594" elapsed="0.000196"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-18T03:05:50.040816" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-18T03:05:50.040407" elapsed="0.000437"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-18T03:05:50.041303" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-18T03:05:50.041008" elapsed="0.000322"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-18T03:05:50.041375" elapsed="0.000032"/>
</return>
<msg time="2026-04-18T03:05:50.041551" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-18T03:05:50.040026" elapsed="0.001551"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:50.047278" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:50.047167" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:50.047148" elapsed="0.000199"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:50.048585" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:50.048449" elapsed="0.000183"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:50.048431" elapsed="0.000224"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-18T03:05:50.049118" level="INFO">${karaf_connection_index} = 4</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-18T03:05:50.048807" elapsed="0.000338"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-18T03:05:50.049543" level="INFO">${current_connection_index} = 7</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:05:50.049310" elapsed="0.000261"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-18T03:05:50.096564" 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 "b "g "p "c "e "p "- "b "g "p "- "i "n "g "e "s "t "[78C- "[A[78Cm</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-18T03:05:50.050081" elapsed="0.046731"/>
</kw>
<msg time="2026-04-18T03:05:50.097040" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-18T03:05:50.097090" 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 "b "g "p "c "e "p "- "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:50.049736" elapsed="0.047391"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-18T03:05:50.131038" level="INFO">"i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "S "t "o "r "e "_ "R "e "s "u "l "t "s "_ "F "o "r "_ "L "i "s "t "e "n "i "n "g "_ "B "G "P "_ "S "p "e "a "k "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-18T03:05:50.097934" elapsed="0.033327"/>
</kw>
<msg time="2026-04-18T03:05:50.131553" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-18T03:05:50.131613" level="INFO">${message_wait} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "S "t "o "r "e "_ "R "...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:50.097462" elapsed="0.034190"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.132110" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:50.131773" elapsed="0.000398"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:50.131735" elapsed="0.000463"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:50.132748" level="INFO"> "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "S "t "o "r "e "_ "R "e "s "u "l "t "s "_ "F "o "r "_ "L "i "s "t "e "n "i "n "g "_ "B "G "P "_ "S "p "e "a "k "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:50.132357" 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-04-18T03:05:50.133133" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:50.132902" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:50.132882" elapsed="0.000331"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-18T03:05:50.133253" elapsed="0.000040"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:05:50.135990" elapsed="0.000153"/>
</kw>
<msg time="2026-04-18T03:05:50.136206" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:50.134869" elapsed="0.001475"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.136652" elapsed="0.000076"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.136992" elapsed="0.000074"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-18T03:05:50.134165" elapsed="0.003012"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-18T03:05:50.133589" elapsed="0.003654"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-18T03:05:50.048146" elapsed="0.089217"/>
</kw>
<msg time="2026-04-18T03:05:50.137464" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:05:50.137512" level="INFO">${message} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "S "t "o "r "e "_ "R "...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:50.047506" elapsed="0.090059"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:05:50.137779" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-18T03:05:50.137663" elapsed="0.000177"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:50.137643" 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-04-18T03:05:50.138300" elapsed="0.000027"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.138710" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:05:50.138785" elapsed="0.000017"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-18T03:05:50.046822" elapsed="0.092076"/>
</kw>
<msg time="2026-04-18T03:05:50.138995" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:05:50.139039" level="INFO">${output} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "S "t "o "r "e "_ "R "...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:50.041964" elapsed="0.097113"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.139412" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:50.139155" elapsed="0.000362"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:50.139136" elapsed="0.000423"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-18T03:05:50.041816" elapsed="0.097769"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-18T03:05:50.041635" elapsed="0.097986"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-18T03:05:50.039236" elapsed="0.100444"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-18T03:05:50.034226" elapsed="0.105515"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:50.033772" elapsed="0.106017"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-18T03:05:50.030852" elapsed="0.108994"/>
</kw>
<kw name="Store_File_To_Workspace">
<kw name="List Files In Directory" owner="SSHLibrary">
<msg time="2026-04-18T03:05:50.146870" level="INFO">6 files:
.bash_logout
.bashrc
.profile
ipaddr.py
lf-env.sh
play.py</msg>
<msg time="2026-04-18T03:05:50.147162" level="INFO">${files} = ['.bash_logout', '.bashrc', '.profile', 'ipaddr.py', 'lf-env.sh', 'play.py']</msg>
<var>${files}</var>
<arg>.</arg>
<doc>A wrapper for `List Directory` that returns only files.</doc>
<status status="PASS" start="2026-04-18T03:05:50.140413" elapsed="0.006810"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-18T03:05:50.148037" level="INFO">Executing command 'cat totals-bgp.csv'.</msg>
<msg time="2026-04-18T03:05:50.160610" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-18T03:05:50.160907" level="INFO">${output_log} = </msg>
<var>${output_log}</var>
<arg>cat ${src_file_name}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-18T03:05:50.147680" elapsed="0.013283"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:50.162133" level="INFO"/>
<arg>${output_log}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:50.161423" elapsed="0.000808"/>
</kw>
<kw name="Create File" owner="OperatingSystem">
<msg time="2026-04-18T03:05:50.164081" level="INFO" html="true">Created file '&lt;a href="file:///w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/totals-bgp.csv"&gt;/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/totals-bgp.csv&lt;/a&gt;'.</msg>
<arg>${dst_file_name}</arg>
<arg>${output_log}</arg>
<doc>Creates a file with the given content and encoding.</doc>
<status status="PASS" start="2026-04-18T03:05:50.162759" elapsed="0.001445"/>
</kw>
<arg>totals-${RESULTS_FILE_NAME}</arg>
<arg>totals-${RESULTS_FILE_NAME}</arg>
<doc>Store the provided file from the SSH client to workspace.</doc>
<status status="PASS" start="2026-04-18T03:05:50.140011" elapsed="0.024337"/>
</kw>
<kw name="Store_File_To_Workspace">
<kw name="List Files In Directory" owner="SSHLibrary">
<msg time="2026-04-18T03:05:50.207337" level="INFO">6 files:
.bash_logout
.bashrc
.profile
ipaddr.py
lf-env.sh
play.py</msg>
<msg time="2026-04-18T03:05:50.207631" level="INFO">${files} = ['.bash_logout', '.bashrc', '.profile', 'ipaddr.py', 'lf-env.sh', 'play.py']</msg>
<var>${files}</var>
<arg>.</arg>
<doc>A wrapper for `List Directory` that returns only files.</doc>
<status status="PASS" start="2026-04-18T03:05:50.165803" elapsed="0.041870"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-18T03:05:50.208269" level="INFO">Executing command 'cat performance-bgp.csv'.</msg>
<msg time="2026-04-18T03:05:50.220662" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-18T03:05:50.220918" level="INFO">${output_log} = </msg>
<var>${output_log}</var>
<arg>cat ${src_file_name}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-18T03:05:50.208017" elapsed="0.012956"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:50.222117" level="INFO"/>
<arg>${output_log}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:50.221398" elapsed="0.000815"/>
</kw>
<kw name="Create File" owner="OperatingSystem">
<msg time="2026-04-18T03:05:50.223348" level="INFO" html="true">Created file '&lt;a href="file:///w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/performance-bgp.csv"&gt;/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/performance-bgp.csv&lt;/a&gt;'.</msg>
<arg>${dst_file_name}</arg>
<arg>${output_log}</arg>
<doc>Creates a file with the given content and encoding.</doc>
<status status="PASS" start="2026-04-18T03:05:50.222669" elapsed="0.000798"/>
</kw>
<arg>performance-${RESULTS_FILE_NAME}</arg>
<arg>performance-${RESULTS_FILE_NAME}</arg>
<doc>Store the provided file from the SSH client to workspace.</doc>
<status status="PASS" start="2026-04-18T03:05:50.164781" elapsed="0.058862"/>
</kw>
<kw name="Store_File_To_Workspace">
<kw name="List Files In Directory" owner="SSHLibrary">
<msg time="2026-04-18T03:05:50.271003" level="INFO">6 files:
.bash_logout
.bashrc
.profile
ipaddr.py
lf-env.sh
play.py</msg>
<msg time="2026-04-18T03:05:50.271222" level="INFO">${files} = ['.bash_logout', '.bashrc', '.profile', 'ipaddr.py', 'lf-env.sh', 'play.py']</msg>
<var>${files}</var>
<arg>.</arg>
<doc>A wrapper for `List Directory` that returns only files.</doc>
<status status="PASS" start="2026-04-18T03:05:50.224925" elapsed="0.046333"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-18T03:05:50.271845" level="INFO">Executing command 'cat totals-bgp.csv'.</msg>
<msg time="2026-04-18T03:05:50.284131" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-18T03:05:50.284366" level="INFO">${output_log} = </msg>
<var>${output_log}</var>
<arg>cat ${src_file_name}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-18T03:05:50.271602" elapsed="0.012821"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:50.285595" level="INFO"/>
<arg>${output_log}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:50.284890" elapsed="0.000811"/>
</kw>
<kw name="Create File" owner="OperatingSystem">
<msg time="2026-04-18T03:05:50.286900" level="INFO" html="true">Created file '&lt;a href="file:///w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/changecount-listening-totals-bgp.csv"&gt;/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/changecount-listening-totals-bgp.csv&lt;/a&gt;'.</msg>
<arg>${dst_file_name}</arg>
<arg>${output_log}</arg>
<doc>Creates a file with the given content and encoding.</doc>
<status status="PASS" start="2026-04-18T03:05:50.286149" elapsed="0.000889"/>
</kw>
<arg>totals-${RESULTS_FILE_NAME}</arg>
<arg>changecount-listening-totals-${RESULTS_FILE_NAME}</arg>
<doc>Store the provided file from the SSH client to workspace.</doc>
<status status="PASS" start="2026-04-18T03:05:50.224013" elapsed="0.063178"/>
</kw>
<kw name="Store_File_To_Workspace">
<kw name="List Files In Directory" owner="SSHLibrary">
<msg time="2026-04-18T03:05:50.331181" level="INFO">6 files:
.bash_logout
.bashrc
.profile
ipaddr.py
lf-env.sh
play.py</msg>
<msg time="2026-04-18T03:05:50.331502" level="INFO">${files} = ['.bash_logout', '.bashrc', '.profile', 'ipaddr.py', 'lf-env.sh', 'play.py']</msg>
<var>${files}</var>
<arg>.</arg>
<doc>A wrapper for `List Directory` that returns only files.</doc>
<status status="PASS" start="2026-04-18T03:05:50.288588" elapsed="0.043145"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-18T03:05:50.332636" level="INFO">Executing command 'cat performance-bgp.csv'.</msg>
<msg time="2026-04-18T03:05:50.345448" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-18T03:05:50.345794" level="INFO">${output_log} = </msg>
<var>${output_log}</var>
<arg>cat ${src_file_name}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-18T03:05:50.332231" elapsed="0.013631"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:50.347117" level="INFO"/>
<arg>${output_log}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:50.346308" elapsed="0.000914"/>
</kw>
<kw name="Create File" owner="OperatingSystem">
<msg time="2026-04-18T03:05:50.348444" level="INFO" html="true">Created file '&lt;a href="file:///w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/changecount-listening-performance-bgp.csv"&gt;/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/changecount-listening-performance-bgp.csv&lt;/a&gt;'.</msg>
<arg>${dst_file_name}</arg>
<arg>${output_log}</arg>
<doc>Creates a file with the given content and encoding.</doc>
<status status="PASS" start="2026-04-18T03:05:50.347715" elapsed="0.000895"/>
</kw>
<arg>performance-${RESULTS_FILE_NAME}</arg>
<arg>changecount-listening-performance-${RESULTS_FILE_NAME}</arg>
<doc>Store the provided file from the SSH client to workspace.</doc>
<status status="PASS" start="2026-04-18T03:05:50.287597" elapsed="0.061168"/>
</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">
<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-04-18T03:05:50.350373" elapsed="0.000720"/>
</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-04-18T03:05:50.352688" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:50.352089" elapsed="0.000687"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:50.352056" elapsed="0.000757"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>'${SetupUtils__Known_Bug_ID}' != ''</arg>
<arg>Set_Known_Bug_Id</arg>
<arg>${EMPTY}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:50.353026" elapsed="0.000456"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:50.361099" level="INFO">${test_skipped} = False</msg>
<var>${test_skipped}</var>
<arg>len(re.findall('SKIPPED', """${TEST_MESSAGE}""")) &gt; 0</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:50.360599" elapsed="0.000533"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-04-18T03:05:50.361376" elapsed="0.000036"/>
</return>
<status status="PASS" start="2026-04-18T03:05:50.361222" elapsed="0.000222"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:50.361199" elapsed="0.000270"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.361642" elapsed="0.000022"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<var>${reference}</var>
<arg>${SUITE_NAME}_${TEST_NAME}</arg>
<arg>[ /\.-]</arg>
<arg>_</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.361821" elapsed="0.000021"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.361997" elapsed="0.000020"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${msg}</var>
<arg>... click for list of related bugs or create a new one if needed (with the${newline}"${reference}"${newline}reference somewhere inside)</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.362167" elapsed="0.000019"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${bugs}</var>
<arg>"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=${reference}&amp;order=bug_status"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.362336" elapsed="0.000019"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.362506" elapsed="0.000033"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.362692" elapsed="0.000020"/>
</kw>
<doc>Report that a test failed and point to linked Bugzilla bug(s).
Linked bugs must contain the ${reference} inside comments (workaround
becasue of currently missing suitable field for external references and
not correctly working the CONTENT MATCHES filter).
Not FAILED (incl. SKIPPED) test are not reported.
This keyword must be used in the [Teardown] setting of the affected test
or as the first line of the test if FastFail module is not being
used. It reports the URL of the bug on console and also puts it
into the Robot log file.</doc>
<status status="PASS" start="2026-04-18T03:05:50.360174" elapsed="0.002597"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:50.351708" elapsed="0.011116"/>
</kw>
<doc>Test case teardown. Show linked bugs and start fast failing in case of failure.</doc>
<status status="PASS" start="2026-04-18T03:05:50.349559" elapsed="0.013532"/>
</kw>
<doc>Store results for plotting</doc>
<status status="PASS" start="2026-04-18T03:05:50.030297" elapsed="0.332848"/>
</test>
<test id="s1-s1-t18" name="Wait_For_Stable_Ipv4_Topology_After_Listening" line="226">
<kw name="Setup_Test_With_Logging_And_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Fail_This_Fast_On_Previous_Error" owner="FailFast">
<if>
<branch type="IF" condition="'''${SuiteFastFail}'''=='True'">
<kw name="Fail" owner="BuiltIn">
<arg>SKIPPED due to a failure in a previous fundamental test case.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.367176" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:50.366885" elapsed="0.000351"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:50.366865" elapsed="0.000397"/>
</if>
<doc>Mark (immediately) this test case as failed when fast-fail is enabled in suite.</doc>
<status status="PASS" start="2026-04-18T03:05:50.366690" elapsed="0.000621"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:50.368639" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:50.368510" elapsed="0.000178"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:50.368492" 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-04-18T03:05:50.373697" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:50.373551" elapsed="0.000194"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:50.373517" elapsed="0.000251"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-18T03:05:50.374813" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-18T03:05:50.374391" elapsed="0.000450"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-18T03:05:50.375379" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-18T03:05:50.375068" elapsed="0.000338"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-18T03:05:50.375451" elapsed="0.000036"/>
</return>
<msg time="2026-04-18T03:05:50.375632" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-18T03:05:50.374005" elapsed="0.001652"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:50.381498" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:50.381374" elapsed="0.000190"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:50.381351" elapsed="0.000237"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:50.382962" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:50.382810" elapsed="0.000206"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:50.382791" elapsed="0.000250"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-18T03:05:50.383547" level="INFO">${karaf_connection_index} = 4</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-18T03:05:50.383209" elapsed="0.000368"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-18T03:05:50.383968" level="INFO">${current_connection_index} = 7</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:05:50.383742" elapsed="0.000252"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-18T03:05:50.421263" 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 "b "g "p "c "e "p "- "b "g "p "- "i "n "g "e "s "t "[78C- "[A[78Cm</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-18T03:05:50.384597" elapsed="0.036851"/>
</kw>
<msg time="2026-04-18T03:05:50.421715" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-18T03:05:50.421769" 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 "b "g "p "c "e "p "- "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:50.384202" elapsed="0.037606"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-18T03:05:50.456794" level="INFO">"i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "W "a "i "t "_ "F "o "r "_ "S "t "a "b "l "e "_ "I "p "v "4 "_ "T "o "p "o "l "o "g "y "_ "A "f "t "e "r "_ "L "i "s "t "e "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-04-18T03:05:50.422473" elapsed="0.034598"/>
</kw>
<msg time="2026-04-18T03:05:50.457365" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-18T03:05:50.457434" level="INFO">${message_wait} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "W "a "i "t "_ "F "o "...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:50.422046" elapsed="0.035439"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.458093" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:50.457663" elapsed="0.000514"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:50.457615" elapsed="0.000601"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:50.458936" level="INFO"> "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "W "a "i "t "_ "F "o "r "_ "S "t "a "b "l "e "_ "I "p "v "4 "_ "T "o "p "o "l "o "g "y "_ "A "f "t "e "r "_ "L "i "s "t "e "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-04-18T03:05:50.458432" elapsed="0.000652"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.459488" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:50.459180" elapsed="0.000403"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:50.459153" elapsed="0.000463"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-18T03:05:50.459740" elapsed="0.000050"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:05:50.463354" elapsed="0.000363"/>
</kw>
<msg time="2026-04-18T03:05:50.463812" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:50.461839" elapsed="0.002184"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.464341" elapsed="0.000080"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.464709" elapsed="0.000087"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-18T03:05:50.460950" elapsed="0.003974"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-18T03:05:50.460177" elapsed="0.004817"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-18T03:05:50.382438" elapsed="0.082659"/>
</kw>
<msg time="2026-04-18T03:05:50.465200" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:05:50.465246" level="INFO">${message} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "W "a "i "t "_ "F "o "...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:50.381757" elapsed="0.083551"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:05:50.465615" elapsed="0.000032"/>
</return>
<status status="PASS" start="2026-04-18T03:05:50.465442" elapsed="0.000243"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:50.465400" elapsed="0.000310"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.466163" elapsed="0.000027"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.466608" elapsed="0.000035"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:05:50.466710" elapsed="0.000022"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-18T03:05:50.380987" elapsed="0.085876"/>
</kw>
<msg time="2026-04-18T03:05:50.467008" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:05:50.467121" level="INFO">${output} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "W "a "i "t "_ "F "o "...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:50.376048" elapsed="0.091127"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.467670" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:50.467290" elapsed="0.000453"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:50.467262" elapsed="0.000513"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-18T03:05:50.375892" elapsed="0.091916"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-18T03:05:50.375715" elapsed="0.092140"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-18T03:05:50.373161" elapsed="0.094774"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-18T03:05:50.368035" elapsed="0.099982"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:50.367470" elapsed="0.100612"/>
</kw>
<doc>Test case setup which skips on previous failure. If not, logs test case name to Karaf log.
Recommended to be used as the default test case setup.</doc>
<status status="PASS" start="2026-04-18T03:05:50.364245" elapsed="0.103912"/>
</kw>
<kw name="Wait_For_Change_Count_To_Become_Stable" owner="ChangeCounter">
<kw name="Create_Limiting_Stability_Safe_Stateful_Validator_From_Value_To_Overcome" owner="WaitUtils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:50.484582" level="INFO">${valid_minimum} = 2</msg>
<var>${valid_minimum}</var>
<arg>str(int(${maximum_invalid}) + 1)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:50.483948" elapsed="0.000682"/>
</kw>
<kw name="Closure_From_Keyword_And_Arguments" owner="ScalarClosures">
<return>
<value>${keyword}</value>
<value>${args}</value>
<value>${kwargs}</value>
<status status="PASS" start="2026-04-18T03:05:50.485393" elapsed="0.000056"/>
</return>
<msg time="2026-04-18T03:05:50.485727" level="INFO">${validator} = ['WaitUtils.Limiting_Stability_Safe_Stateful_Validator_As_Keyword', ['state_holder', 'data_holder'], {'valid_minimum': '2'}]</msg>
<var>${validator}</var>
<arg>WaitUtils.Limiting_Stability_Safe_Stateful_Validator_As_Keyword</arg>
<arg>state_holder</arg>
<arg>data_holder</arg>
<arg>valid_minimum=${valid_minimum}</arg>
<doc>Turn keyword with given arguments into a scalar closure.</doc>
<status status="PASS" start="2026-04-18T03:05:50.484956" elapsed="0.000809"/>
</kw>
<return>
<value>${validator}</value>
<status status="PASS" start="2026-04-18T03:05:50.485839" elapsed="0.000037"/>
</return>
<msg time="2026-04-18T03:05:50.486159" level="INFO">${validator} = ['WaitUtils.Limiting_Stability_Safe_Stateful_Validator_As_Keyword', ['state_holder', 'data_holder'], {'valid_minimum': '2'}]</msg>
<var>${validator}</var>
<arg>maximum_invalid=${count_to_overcome}</arg>
<doc>Helper function to use if maximum invalid value (instead of minimum valid) is known.</doc>
<status status="PASS" start="2026-04-18T03:05:50.483396" elapsed="0.002803"/>
</kw>
<kw name="Wait_For_Getter_Error_Or_Safe_Stateful_Validator_Consecutive_Success" owner="WaitUtils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:50.487953" level="INFO">${tmp} = 1</msg>
<var>${tmp}</var>
<arg>int(${count})</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:50.487521" elapsed="0.000461"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:50.488464" level="INFO">count=1</msg>
<arg>count=${tmp}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:50.488154" elapsed="0.000396"/>
</kw>
<kw name="WaitUtils__Check_Sanity_And_Compute_Derived_Times" owner="WaitUtils">
<if>
<branch type="IF" condition="int(${count}) &lt; 1">
<kw name="Fail" owner="BuiltIn">
<arg>\${count} is ${count} and not at least 1.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.489755" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:50.489482" elapsed="0.000332"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:50.489456" elapsed="0.000384"/>
</if>
<kw name="Convert Time" owner="DateTime">
<msg time="2026-04-18T03:05:50.490384" level="INFO">${period_in_seconds} = 60.0</msg>
<var>${period_in_seconds}</var>
<arg>${period}</arg>
<arg>result_format=number</arg>
<doc>Converts between supported `time formats`.</doc>
<status status="PASS" start="2026-04-18T03:05:50.490048" elapsed="0.000366"/>
</kw>
<if>
<branch type="IF" condition="${period_in_seconds} &lt;= 0.0">
<kw name="Fail" owner="BuiltIn">
<arg>\${period} ${period} has to be positive.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.490792" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:50.490497" elapsed="0.000360"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:50.490476" elapsed="0.000409"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:05:50.491298" level="INFO">${date_now} = 2026-04-18 03:05:50.491</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:05:50.491090" elapsed="0.000240"/>
</kw>
<kw name="Convert Time" owner="DateTime">
<msg time="2026-04-18T03:05:50.491846" level="INFO">${timeout_in_seconds} = 735.0</msg>
<var>${timeout_in_seconds}</var>
<arg>${timeout}</arg>
<arg>result_format=number</arg>
<doc>Converts between supported `time formats`.</doc>
<status status="PASS" start="2026-04-18T03:05:50.491544" elapsed="0.000333"/>
</kw>
<kw name="Add Time To Date" owner="DateTime">
<msg time="2026-04-18T03:05:50.492447" level="INFO">${date_deadline} = 2026-04-18 03:18:05.491</msg>
<var>${date_deadline}</var>
<arg>${date_now}</arg>
<arg>${timeout_in_seconds}</arg>
<doc>Adds time to date and returns the resulting date.</doc>
<status status="PASS" start="2026-04-18T03:05:50.492079" elapsed="0.000398"/>
</kw>
<return>
<value>${timeout_in_seconds}</value>
<value>${period_in_seconds}</value>
<value>${date_deadline}</value>
<status status="PASS" start="2026-04-18T03:05:50.492556" elapsed="0.000047"/>
</return>
<msg time="2026-04-18T03:05:50.492858" level="INFO">${timeout_in_seconds} = 735.0</msg>
<msg time="2026-04-18T03:05:50.492914" level="INFO">${period_in_seconds} = 60.0</msg>
<msg time="2026-04-18T03:05:50.492965" level="INFO">${date_deadline} = 2026-04-18 03:18:05.491</msg>
<var>${timeout_in_seconds}</var>
<var>${period_in_seconds}</var>
<var>${date_deadline}</var>
<arg>timeout=${timeout}</arg>
<arg>period=${period}</arg>
<arg>count=${count}</arg>
<doc>Common checks for argument values. Return times in seconds and deadline date implied by timeout time.</doc>
<status status="PASS" start="2026-04-18T03:05:50.489012" elapsed="0.003982"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:50.493999" level="INFO">${maximum_sleeps} = 13</msg>
<var>${maximum_sleeps}</var>
<arg>math.ceil(${timeout_in_seconds} / ${period_in_seconds})</arg>
<arg>modules=math</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:50.493402" elapsed="0.000629"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:50.494573" level="INFO">${result} = No result yet.</msg>
<var>${result}</var>
<arg>No result yet.</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:05:50.494245" elapsed="0.000360"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:50.495219" level="INFO">${state} = 1</msg>
<var>${state}</var>
<arg>${initial_state}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:05:50.494808" elapsed="0.000444"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="Getter_And_Safe_Stateful_Validator_Have_To_Succeed_Consecutively_By_Deadline" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:50.497760" level="INFO">${result} = No result yet.</msg>
<var>${result}</var>
<arg>No result yet.</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:05:50.497173" elapsed="0.000619"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:50.498266" level="INFO">${state} = 1</msg>
<var>${state}</var>
<arg>${initial_state}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:05:50.497966" elapsed="0.000327"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:50.498834" level="INFO">${sleeps} = 0</msg>
<var>${sleeps}</var>
<arg>${count} - 1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:50.498458" elapsed="0.000403"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:05:50.500461" level="INFO">${date_now} = 2026-04-18 03:05:50.500</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:05:50.500279" elapsed="0.000210"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:05:50.501101" level="INFO">${time_deadline} = 734.991</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:05:50.500666" elapsed="0.000463"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:50.501739" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:50.501299" elapsed="0.000467"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.502122" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:50.501851" elapsed="0.000328"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:50.501826" elapsed="0.000457"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:05:50.499656" elapsed="0.002685"/>
</kw>
<msg time="2026-04-18T03:05:50.502449" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:05:50.502494" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:50.499038" elapsed="0.003480"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:05:50.502736" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:50.502623" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:50.502603" elapsed="0.000216"/>
</if>
<for flavor="IN RANGE">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_As_Is" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:50.506872" level="INFO">${keyword} = Get_Change_Count</msg>
<msg time="2026-04-18T03:05:50.506947" level="INFO">${args} = []</msg>
<msg time="2026-04-18T03:05:50.507012" level="INFO">${kwargs} = {}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:05:50.506372" elapsed="0.000675"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Get_Change_Count" owner="ChangeCounter">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:05:50.517716" level="INFO">GET Request : url=http://10.30.170.68:8181/rests/data/data-change-counter:data-change-counter?content=nonconfig 
 path_url=/rests/data/data-change-counter:data-change-counter?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0cikoz8bf13pu14i8fg3ixh1ws0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-18T03:05:50.517982" level="INFO">GET Response : url=http://10.30.170.68:8181/rests/data/data-change-counter:data-change-counter?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '174'} 
 body=&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt; 
 </msg>
<msg time="2026-04-18T03:05:50.518289" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${CC_DATA_CHANGE_COUNTER_URL}</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-18T03:05:50.509105" elapsed="0.009273"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:50.523153" level="INFO">&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:50.518766" elapsed="0.004633"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:50.528488" level="FAIL">Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<var>${count}</var>
<arg>json.loads('${response.text}')["data-change-counter:data-change-counter"]["counter"][0]["count"]</arg>
<arg>modules=json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-04-18T03:05:50.523851" elapsed="0.004936">Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<return>
<value>${count}</value>
<status status="NOT RUN" start="2026-04-18T03:05:50.528908" elapsed="0.000027"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>GET data change request, assert status 200, return the value.</doc>
<status status="FAIL" start="2026-04-18T03:05:50.508070" elapsed="0.021045">Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="FAIL" start="2026-04-18T03:05:50.507337" elapsed="0.021841">Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<return>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:05:50.529246" elapsed="0.000020"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure without affecting arguments.</doc>
<status status="FAIL" start="2026-04-18T03:05:50.505917" elapsed="0.023442">Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<msg time="2026-04-18T03:05:50.529483" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:05:50.529546" level="INFO">${message} = Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-chang...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:50.505116" elapsed="0.024460"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:50.529844" elapsed="0.031761"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="NOT RUN" start="2026-04-18T03:05:50.562656" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:50.562504" elapsed="0.000200"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:50.562478" elapsed="0.000250"/>
</if>
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-18T03:05:50.563324" level="FAIL">Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-18T03:05:50.562894" elapsed="0.000511">Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If FAIL is PASS do nothing. Otherwise Fail with Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0).</doc>
<status status="FAIL" start="2026-04-18T03:05:50.562074" elapsed="0.001467">Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:05:50.563610" elapsed="0.000018"/>
</return>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="FAIL" start="2026-04-18T03:05:50.504467" elapsed="0.059257">Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<msg time="2026-04-18T03:05:50.563851" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:05:50.563898" level="INFO">${data} = Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-chang...</msg>
<var>${status}</var>
<var>${data}</var>
<arg>ScalarClosures.Run_Keyword_And_Collect_Garbage</arg>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:50.503775" elapsed="0.060153"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Getter failed: ${data}</value>
<status status="PASS" start="2026-04-18T03:05:50.564116" elapsed="0.000029"/>
</return>
<status status="PASS" start="2026-04-18T03:05:50.564006" elapsed="0.000178"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:50.563986" elapsed="0.000222"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.564377" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:05:50.564513" elapsed="0.000029"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:50.564478" elapsed="0.000100"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:05:50.564460" elapsed="0.000140"/>
</if>
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>ScalarClosures.Run_Closure_After_Replacing_First_Two_Arguments</arg>
<arg>${safe_validator}</arg>
<arg>${state}</arg>
<arg>${data}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.564830" elapsed="0.000024"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Validator failed: ${result}</value>
<status status="NOT RUN" start="2026-04-18T03:05:50.564970" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:50.564935" elapsed="0.000081"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:05:50.564917" elapsed="0.000120"/>
</if>
<if>
<branch type="IF" condition="${sleeps_left} &lt;= 0">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:05:50.565122" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:50.565088" elapsed="0.000087"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:05:50.565073" elapsed="0.000126"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.565356" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:05:50.565490" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:50.565456" elapsed="0.000095"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:05:50.565440" elapsed="0.000135"/>
</if>
<kw name="Sleep" owner="BuiltIn">
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.565718" elapsed="0.000021"/>
</kw>
<var name="${sleeps_left}">0</var>
<status status="PASS" start="2026-04-18T03:05:50.503509" elapsed="0.062263"/>
</iter>
<var>${sleeps_left}</var>
<value>${count}-1</value>
<value>-1</value>
<value>-1</value>
<status status="PASS" start="2026-04-18T03:05:50.502893" elapsed="0.062915"/>
</for>
<kw name="Fail" owner="BuiltIn">
<arg>Logic error, we should have returned before.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.566033" elapsed="0.000023"/>
</kw>
<msg time="2026-04-18T03:05:50.566264" level="INFO">${state} = 1</msg>
<msg time="2026-04-18T03:05:50.566314" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:05:50.566368" level="INFO">${result} = Getter failed: Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/count...</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>count=${count}</arg>
<arg>getter=${getter}</arg>
<arg>safe_validator=${safe_validator}</arg>
<arg>initial_state=${state}</arg>
<doc>Pass only if consecutively 1 times in a row with 60 between attempts: ${getter} creates data and ${safe_validator} passes. Validator updates its state even if it reports failure. Always return validator state, status and message.</doc>
<status status="PASS" start="2026-04-18T03:05:50.496346" elapsed="0.070052"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:05:50.566619" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:50.566491" elapsed="0.000172"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:50.566472" elapsed="0.000213"/>
</if>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:05:50.568073" level="INFO">Length is 362.</msg>
<msg time="2026-04-18T03:05:50.568150" level="FAIL">'Getter failed: Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:05:50.567784" elapsed="0.000433">'Getter failed: Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)' should be empty.</status>
</kw>
<msg time="2026-04-18T03:05:50.568323" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:05:50.568367" level="INFO">${result} = 'Getter failed: Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/coun...</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:50.567405" elapsed="0.000990"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:05:50.568596" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:50.568471" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:50.568452" elapsed="0.000212"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:05:50.569075" level="INFO">@{message_chunks} = [ Getter failed: Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/cou...</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:05:50.568818" elapsed="0.000287"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:05:50.572316" level="INFO">Length is 362.</msg>
<msg time="2026-04-18T03:05:50.572396" level="FAIL">'Getter failed: Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:05:50.569636" elapsed="0.002827">'Getter failed: Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)' should be empty.</status>
</kw>
<msg time="2026-04-18T03:05:50.572586" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:05:50.572634" level="INFO">${result} = 'Getter failed: Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/coun...</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:50.569276" elapsed="0.003385"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:05:50.572845" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-18T03:05:50.572737" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:50.572717" elapsed="0.000218"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.573086" elapsed="0.000022"/>
</kw>
<arg>${result}</arg>
<arg>Not possible to succeed within the deadline.</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:05:50.566965" elapsed="0.006274"/>
</kw>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:05:50.574560" level="INFO">Length is 362.</msg>
<msg time="2026-04-18T03:05:50.574638" level="FAIL">'Getter failed: Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:05:50.574277" elapsed="0.000480">'Getter failed: Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)' should be empty.</status>
</kw>
<msg time="2026-04-18T03:05:50.574864" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:05:50.574908" level="INFO">${result} = 'Getter failed: Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/coun...</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:50.573931" elapsed="0.001003"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:05:50.575118" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:50.575009" elapsed="0.000218"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:50.574990" elapsed="0.000266"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:05:50.575704" level="INFO">@{message_chunks} = [  | : Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/dat...</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:05:50.575432" elapsed="0.000302"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:05:50.578905" level="INFO">Length is 0.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="PASS" start="2026-04-18T03:05:50.576247" elapsed="0.002708"/>
</kw>
<msg time="2026-04-18T03:05:50.579050" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:05:50.579094" level="INFO">${result} = None</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:50.575905" elapsed="0.003212"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="NOT RUN" start="2026-04-18T03:05:50.579330" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:50.579219" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:50.579195" elapsed="0.000203"/>
</if>
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-18T03:05:50.579932" level="FAIL">Getter failed: Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-18T03:05:50.579571" elapsed="0.000429">Getter failed: Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<arg>${result}</arg>
<arg>Getter failed</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="FAIL" start="2026-04-18T03:05:50.573546" elapsed="0.006565">Getter failed: Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<kw name="Sleep" owner="BuiltIn">
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.580316" elapsed="0.000027"/>
</kw>
<var name="${try}">1</var>
<status status="FAIL" start="2026-04-18T03:05:50.495692" elapsed="0.084706">Getter failed: Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</iter>
<var>${try}</var>
<value>1</value>
<value>${maximum_sleeps}+2</value>
<status status="FAIL" start="2026-04-18T03:05:50.495326" elapsed="0.085138">Getter failed: Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</for>
<kw name="Fail" owner="BuiltIn">
<arg>Logic error, we should have returned before.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.580676" elapsed="0.000022"/>
</kw>
<var>${result}</var>
<arg>timeout=${timeout}</arg>
<arg>period=${period}</arg>
<arg>count=${repetitions}</arg>
<arg>getter=${ChangeCounter__getter}</arg>
<arg>safe_validator=${validator}</arg>
<arg>initial_state=${count_to_overcome}</arg>
<doc>Analogue of Wait Until Keyword Succeeds, but it passes state of validator around and exits early on getter failure. Calls GASSVHTSCBD to verify data is "stable".</doc>
<status status="FAIL" start="2026-04-18T03:05:50.486686" elapsed="0.094102">Getter failed: Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</kw>
<return>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:05:50.580860" elapsed="0.000016"/>
</return>
<arg>timeout=${bgp_emptying_timeout}</arg>
<arg>period=${CHECK_PERIOD_CHANGE_COUNT_SINGLE}</arg>
<arg>repetitions=${REPETITIONS_CHANGE_COUNT_SINGLE}</arg>
<arg>count_to_overcome=${last_change_count_single}</arg>
<doc>Each ${period} get count. After 1 of constant value above ${count_to_overcome} within ${timeout}, Return validator output. Fail early on getter error.</doc>
<status status="FAIL" start="2026-04-18T03:05:50.482402" elapsed="0.098554">Getter failed: Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</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-04-18T03:05:50.582639" 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-04-18T03:05:50.582232" elapsed="0.000460"/>
</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-04-18T03:05:50.581766" elapsed="0.000989"/>
</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-04-18T03:05:50.583735" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:50.583287" elapsed="0.000520"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:50.583266" elapsed="0.000567"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>'${SetupUtils__Known_Bug_ID}' != ''</arg>
<arg>Set_Known_Bug_Id</arg>
<arg>${EMPTY}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:50.583999" elapsed="0.000331"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:50.589749" level="INFO">${test_skipped} = False</msg>
<var>${test_skipped}</var>
<arg>len(re.findall('SKIPPED', """${TEST_MESSAGE}""")) &gt; 0</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:50.589251" elapsed="0.000529"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="NOT RUN" start="2026-04-18T03:05:50.590021" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:50.589869" elapsed="0.000197"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:50.589846" elapsed="0.000243"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:50.590564" level="INFO">${newline} = 
</msg>
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:50.590244" elapsed="0.000348"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-18T03:05:50.591028" level="INFO">${reference} = bgpcep_bgp_ingest_mixed_txt_Singlepeer_Changecount_Wait_For_Stable_Ipv4_Topology_After_Listening</msg>
<var>${reference}</var>
<arg>${SUITE_NAME}_${TEST_NAME}</arg>
<arg>[ /\.-]</arg>
<arg>_</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-18T03:05:50.590759" elapsed="0.000296"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<msg time="2026-04-18T03:05:50.591442" level="INFO">${reference} = bgpcep_bgp_ingest_mixed_txt_singlepeer_changecount_wait_for_stable_ipv4_topology_after_listening</msg>
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="PASS" start="2026-04-18T03:05:50.591262" elapsed="0.000206"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:50.591987" level="INFO">${msg} = ... click for list of related bugs or create a new one if needed (with the
"bgpcep_bgp_ingest_mixed_txt_singlepeer_changecount_wait_for_stable_ipv4_topology_after_listening"
reference somewhere inside...</msg>
<var>${msg}</var>
<arg>... click for list of related bugs or create a new one if needed (with the${newline}"${reference}"${newline}reference somewhere inside)</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:05:50.591644" elapsed="0.000370"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:50.592510" level="INFO">${bugs} = "https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=bgpcep_bgp_ingest_mixed_txt_singlepeer_changecount_wait_for_stable_ipv4_topology_after_listening&amp;order=bug_status"</msg>
<var>${bugs}</var>
<arg>"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=${reference}&amp;order=bug_status"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:05:50.592183" elapsed="0.000374"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<msg time="2026-04-18T03:05:50.593181" level="INFO">Set test message to:
... click for list of related bugs or create a new one if needed (with the
"bgpcep_bgp_ingest_mixed_txt_singlepeer_changecount_wait_for_stable_ipv4_topology_after_listening"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=bgpcep_bgp_ingest_mixed_txt_singlepeer_changecount_wait_for_stable_ipv4_topology_after_listening&amp;order=bug_status"

Getter failed: Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</msg>
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="PASS" start="2026-04-18T03:05:50.592720" elapsed="0.000704"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:50.593902" level="INFO">... click for list of related bugs or create a new one if needed (with the
"bgpcep_bgp_ingest_mixed_txt_singlepeer_changecount_wait_for_stable_ipv4_topology_after_listening"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=bgpcep_bgp_ingest_mixed_txt_singlepeer_changecount_wait_for_stable_ipv4_topology_after_listening&amp;order=bug_status"</msg>
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:50.593604" elapsed="0.000348"/>
</kw>
<doc>Report that a test failed and point to linked Bugzilla bug(s).
Linked bugs must contain the ${reference} inside comments (workaround
becasue of currently missing suitable field for external references and
not correctly working the CONTENT MATCHES filter).
Not FAILED (incl. SKIPPED) test are not reported.
This keyword must be used in the [Teardown] setting of the affected test
or as the first line of the test if FastFail module is not being
used. It reports the URL of the bug on console and also puts it
into the Robot log file.</doc>
<status status="PASS" start="2026-04-18T03:05:50.588884" elapsed="0.005128"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:50.583011" elapsed="0.011057"/>
</kw>
<doc>Test case teardown. Show linked bugs and start fast failing in case of failure.</doc>
<status status="PASS" start="2026-04-18T03:05:50.581361" elapsed="0.012753"/>
</kw>
<doc>Wait until example-ipv4-topology becomes stable again.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-18T03:05:50.363593" elapsed="0.230641">... click for list of related bugs or create a new one if needed (with the
"bgpcep_bgp_ingest_mixed_txt_singlepeer_changecount_wait_for_stable_ipv4_topology_after_listening"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=bgpcep_bgp_ingest_mixed_txt_singlepeer_changecount_wait_for_stable_ipv4_topology_after_listening&amp;order=bug_status"

Getter failed: Evaluating expression 'json.loads(\'&lt;data-change-counter xmlns="urn:opendaylight:params:xml:ns:yang:bgp-data-change-counter"&gt;&lt;counter&gt;&lt;id&gt;data-change-counter&lt;/id&gt;&lt;count&gt;1&lt;/count&gt;&lt;/counter&gt;&lt;/data-change-counter&gt;\')["data-change-counter:data-change-counter"]["counter"][0]["count"]' failed: JSONDecodeError: Expecting value: line 1 column 1 (char 0)</status>
</test>
<test id="s1-s1-t19" name="Check_For_Empty_Ipv4_Topology_After_Listening" 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-04-18T03:05:50.598138" elapsed="0.000257"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-18T03:05:50.597849" elapsed="0.000607"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:50.599660" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:50.599497" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:50.599471" elapsed="0.000267"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:50.604851" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:50.604721" elapsed="0.000194"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:50.604699" elapsed="0.000261"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-18T03:05:50.606164" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-18T03:05:50.605716" elapsed="0.000477"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-18T03:05:50.606692" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-18T03:05:50.606364" elapsed="0.000355"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-18T03:05:50.606765" elapsed="0.000038"/>
</return>
<msg time="2026-04-18T03:05:50.606932" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-18T03:05:50.605273" elapsed="0.001683"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:50.612884" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:50.612767" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:50.612746" elapsed="0.000211"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:50.614206" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:50.614099" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:50.614080" elapsed="0.000193"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-18T03:05:50.614756" level="INFO">${karaf_connection_index} = 4</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-18T03:05:50.614424" elapsed="0.000360"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-18T03:05:50.615176" level="INFO">${current_connection_index} = 7</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:05:50.614954" elapsed="0.000293"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-18T03:05:50.653403" 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 "b "g "p "c "e "p "- "b "g "p "- "i "n "g "e "s "t "[78C- "[A[78Cm</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-18T03:05:50.615843" elapsed="0.037805"/>
</kw>
<msg time="2026-04-18T03:05:50.653885" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-18T03:05:50.653935" 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 "b "g "p "c "e "p "- "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:50.615454" elapsed="0.038520"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-18T03:05:50.691002" level="INFO">"i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "C "h "e "c "k "_ "F "o "r "_ "E "m "p "t "y "_ "I "p "v "4 "_ "T "o "p "o "l "o "g "y "_ "A "f "t "e "r "_ "L "i "s "t "e "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-04-18T03:05:50.654708" elapsed="0.036512"/>
</kw>
<msg time="2026-04-18T03:05:50.691510" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-18T03:05:50.691588" level="INFO">${message_wait} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "C "h "e "c "k "_ "F "...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:50.654228" elapsed="0.037401"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.692154" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:50.691823" elapsed="0.000394"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:50.691789" elapsed="0.000455"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:50.692810" level="INFO"> "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "C "h "e "c "k "_ "F "o "r "_ "E "m "p "t "y "_ "I "p "v "4 "_ "T "o "p "o "l "o "g "y "_ "A "f "t "e "r "_ "L "i "s "t "e "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-04-18T03:05:50.692400" 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-04-18T03:05:50.693218" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:50.692972" elapsed="0.000305"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:50.692949" elapsed="0.000353"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-18T03:05:50.693342" elapsed="0.000040"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:05:50.696397" elapsed="0.000186"/>
</kw>
<msg time="2026-04-18T03:05:50.696651" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:50.694992" elapsed="0.001800"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.697091" elapsed="0.000078"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.697600" elapsed="0.000076"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-18T03:05:50.694284" elapsed="0.003506"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-18T03:05:50.693687" elapsed="0.004171"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-18T03:05:50.613797" elapsed="0.084164"/>
</kw>
<msg time="2026-04-18T03:05:50.698063" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:05:50.698109" level="INFO">${message} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "C "h "e "c "k "_ "F "...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:50.613124" elapsed="0.085037"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:05:50.698418" elapsed="0.000033"/>
</return>
<status status="PASS" start="2026-04-18T03:05:50.698278" elapsed="0.000212"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:50.698249" elapsed="0.000270"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.699012" elapsed="0.000032"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.699413" elapsed="0.000028"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:05:50.699492" elapsed="0.000018"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-18T03:05:50.612385" elapsed="0.087256"/>
</kw>
<msg time="2026-04-18T03:05:50.699744" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:05:50.699790" level="INFO">${output} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "C "h "e "c "k "_ "F "...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:50.607439" elapsed="0.092390"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.700172" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:50.699909" elapsed="0.000318"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:50.699890" elapsed="0.000361"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-18T03:05:50.607265" elapsed="0.093012"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-18T03:05:50.607017" elapsed="0.093296"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-18T03:05:50.604285" elapsed="0.096087"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-18T03:05:50.599113" elapsed="0.101319"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:50.598635" elapsed="0.101848"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-18T03:05:50.595356" elapsed="0.105253"/>
</kw>
<kw name="Check_Ipv4_Topology_Is_Empty" owner="PrefixCounting">
<kw name="Check_Ipv4_Topology_Count" owner="PrefixCounting">
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get_Ipv4_Topology_Count" owner="PrefixCounting">
<kw name="Get_Ipv4_Topology" owner="PrefixCounting">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:05:50.710847" level="INFO">GET Request : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0cikoz8bf13pu14i8fg3ixh1ws0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-18T03:05:50.711012" level="INFO">GET Response : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '293'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xmlns="urn:opendaylight:params:xml:ns:yang:odl-bgp-topology-types"/&gt;&lt;/topology-types&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-04-18T03:05:50.711159" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${PC_NW_TOPOLOGY}=${topology}?content=nonconfig</arg>
<arg>expected_status=anything</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-18T03:05:50.704276" elapsed="0.006912"/>
</kw>
<if>
<branch type="IF" condition="${response.status_code} != 200">
<kw name="Fail" owner="BuiltIn">
<arg>Get on ${topology} returned status code ${response.status_code} with message: ${response.text}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.714588" elapsed="0.000038"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:50.711298" elapsed="0.003381"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:50.711268" elapsed="0.003449"/>
</if>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-18T03:05:50.714772" elapsed="0.000052"/>
</return>
<msg time="2026-04-18T03:05:50.718069" level="INFO">${topology} = &lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xml...</msg>
<var>${topology}</var>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>GET the example-ipv4-topology data, check status is 200, return the topology data.</doc>
<status status="PASS" start="2026-04-18T03:05:50.703831" elapsed="0.014288"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:50.719122" level="INFO">${prefix_count} = 0</msg>
<var>${prefix_count}</var>
<arg>len(re.findall('"prefix":"', '''${topology}'''))</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:50.718396" elapsed="0.000768"/>
</kw>
<return>
<value>${prefix_count}</value>
<status status="PASS" start="2026-04-18T03:05:50.719250" elapsed="0.000048"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Get topology. If not fail, return number of prefixes in the topology.</doc>
<status status="PASS" start="2026-04-18T03:05:50.703211" elapsed="0.016301"/>
</kw>
<msg time="2026-04-18T03:05:50.719691" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:05:50.719757" level="INFO">${message} = 0</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:50.702693" elapsed="0.017099"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:50.720002" elapsed="0.030165"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:05:50.751631" elapsed="0.000048"/>
</return>
<status status="PASS" start="2026-04-18T03:05:50.751347" elapsed="0.000382"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:50.751313" elapsed="0.000451"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.751983" elapsed="0.000024"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with 0.</doc>
<status status="PASS" start="2026-04-18T03:05:50.750778" elapsed="0.001292"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:05:50.752116" elapsed="0.000028"/>
</return>
<msg time="2026-04-18T03:05:50.752278" level="INFO">${actual_count} = 0</msg>
<var>${actual_count}</var>
<arg>Get_Ipv4_Topology_Count</arg>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:05:50.701848" elapsed="0.050459"/>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<msg time="2026-04-18T03:05:50.752857" level="INFO">Argument types are:
&lt;class 'int'&gt;
&lt;class 'str'&gt;</msg>
<arg>${actual_count}</arg>
<arg>${expected_count}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="PASS" start="2026-04-18T03:05:50.752487" elapsed="0.000439"/>
</kw>
<arg>0</arg>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>Check that the count of prefixes matches the expected count. Fails if it does not. In either case, collect garbage.</doc>
<status status="PASS" start="2026-04-18T03:05:50.701243" elapsed="0.051753"/>
</kw>
<doc>Example_Ipv4_Topology has to give status 200 with zero prefixes.</doc>
<status status="PASS" start="2026-04-18T03:05:50.700835" elapsed="0.052224"/>
</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">
<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-04-18T03:05:50.753692" elapsed="0.000256"/>
</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-04-18T03:05:50.754824" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:50.754405" elapsed="0.000558"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:50.754385" elapsed="0.000608"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>'${SetupUtils__Known_Bug_ID}' != ''</arg>
<arg>Set_Known_Bug_Id</arg>
<arg>${EMPTY}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:50.755153" elapsed="0.000365"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:50.760700" level="INFO">${test_skipped} = False</msg>
<var>${test_skipped}</var>
<arg>len(re.findall('SKIPPED', """${TEST_MESSAGE}""")) &gt; 0</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:50.760256" elapsed="0.000473"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-04-18T03:05:50.760950" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-04-18T03:05:50.760804" elapsed="0.000215"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:50.760785" 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-04-18T03:05:50.761201" elapsed="0.000023"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<var>${reference}</var>
<arg>${SUITE_NAME}_${TEST_NAME}</arg>
<arg>[ /\.-]</arg>
<arg>_</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.761382" elapsed="0.000021"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.761583" elapsed="0.000021"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${msg}</var>
<arg>... click for list of related bugs or create a new one if needed (with the${newline}"${reference}"${newline}reference somewhere inside)</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.761762" elapsed="0.000020"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${bugs}</var>
<arg>"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=${reference}&amp;order=bug_status"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.761936" elapsed="0.000021"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.762109" elapsed="0.000021"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.762280" elapsed="0.000020"/>
</kw>
<doc>Report that a test failed and point to linked Bugzilla bug(s).
Linked bugs must contain the ${reference} inside comments (workaround
becasue of currently missing suitable field for external references and
not correctly working the CONTENT MATCHES filter).
Not FAILED (incl. SKIPPED) test are not reported.
This keyword must be used in the [Teardown] setting of the affected test
or as the first line of the test if FastFail module is not being
used. It reports the URL of the bug on console and also puts it
into the Robot log file.</doc>
<status status="PASS" start="2026-04-18T03:05:50.759926" elapsed="0.002431"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:50.754185" elapsed="0.008224"/>
</kw>
<doc>Test case teardown. Show linked bugs and start fast failing in case of failure.</doc>
<status status="PASS" start="2026-04-18T03:05:50.753347" elapsed="0.009106"/>
</kw>
<doc>Example-ipv4-topology should be empty now.</doc>
<tag>critical</tag>
<status status="PASS" start="2026-04-18T03:05:50.594657" elapsed="0.167836"/>
</test>
<test id="s1-s1-t20" name="Restore_Data_Change_Counter_Configuration" line="241">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-18T03:05:50.766264" elapsed="0.000222"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-18T03:05:50.765985" elapsed="0.000575"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:50.767680" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:50.767559" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:50.767523" elapsed="0.000226"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:50.772785" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:50.772676" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:50.772658" elapsed="0.000207"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-18T03:05:50.774071" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-18T03:05:50.773638" elapsed="0.000460"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-18T03:05:50.774595" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-18T03:05:50.774265" elapsed="0.000357"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-18T03:05:50.774668" elapsed="0.000031"/>
</return>
<msg time="2026-04-18T03:05:50.774828" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-18T03:05:50.773158" elapsed="0.001695"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:50.780440" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:50.780328" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:50.780308" elapsed="0.000201"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:50.781759" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:50.781648" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:50.781629" elapsed="0.000238"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-18T03:05:50.782332" level="INFO">${karaf_connection_index} = 4</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-18T03:05:50.782024" elapsed="0.000336"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-18T03:05:50.782772" level="INFO">${current_connection_index} = 7</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:05:50.782547" elapsed="0.000251"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-18T03:05:50.819229" 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 "b "g "p "c "e "p "- "b "g "p "- "i "n "g "e "s "t "[78C- "[A[78Cm</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-18T03:05:50.783312" elapsed="0.036032"/>
</kw>
<msg time="2026-04-18T03:05:50.819559" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-18T03:05:50.819611" 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 "b "g "p "c "e "p "- "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:50.782966" elapsed="0.036684"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-18T03:05:50.853928" level="INFO">"i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "R "e "s "t "o "r "e "_ "D "a "t "a "_ "C "h "a "n "g "e "_ "C "o "u "n "t "e "r "_ "C "o "n "f "i "g "u "r "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-04-18T03:05:50.820369" elapsed="0.033717"/>
</kw>
<msg time="2026-04-18T03:05:50.854259" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-18T03:05:50.854308" level="INFO">${message_wait} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "R "e "s "t "o "r "e "...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:50.819839" elapsed="0.034509"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.854711" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:50.854435" elapsed="0.000336"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:50.854411" elapsed="0.000385"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:50.855270" level="INFO"> "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "R "e "s "t "o "r "e "_ "D "a "t "a "_ "C "h "a "n "g "e "_ "C "o "u "n "t "e "r "_ "C "o "n "f "i "g "u "r "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-04-18T03:05:50.854948" elapsed="0.000405"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.855703" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:50.855422" elapsed="0.000339"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:50.855403" elapsed="0.000384"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-18T03:05:50.855823" elapsed="0.000034"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:05:50.858593" elapsed="0.000154"/>
</kw>
<msg time="2026-04-18T03:05:50.858810" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:50.857410" elapsed="0.001536"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.859226" elapsed="0.000076"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.859616" elapsed="0.000076"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-18T03:05:50.856712" elapsed="0.003094"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-18T03:05:50.856121" elapsed="0.003751"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-18T03:05:50.781311" elapsed="0.078661"/>
</kw>
<msg time="2026-04-18T03:05:50.860069" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:05:50.860114" level="INFO">${message} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "R "e "s "t "o "r "e "...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:50.780683" elapsed="0.079470"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:05:50.860342" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-18T03:05:50.860231" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:50.860211" 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-04-18T03:05:50.860861" elapsed="0.000026"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.861271" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:05:50.861343" elapsed="0.000016"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-18T03:05:50.779983" elapsed="0.081471"/>
</kw>
<msg time="2026-04-18T03:05:50.861576" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:05:50.861622" level="INFO">${output} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "R "e "s "t "o "r "e "...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:50.775238" elapsed="0.086422"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.861997" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:50.861738" elapsed="0.000313"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:50.861720" elapsed="0.000355"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-18T03:05:50.775088" elapsed="0.087011"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-18T03:05:50.774909" elapsed="0.087222"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-18T03:05:50.772294" elapsed="0.089892"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-18T03:05:50.767170" elapsed="0.095072"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:50.766724" elapsed="0.095562"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-18T03:05:50.763569" elapsed="0.098770"/>
</kw>
<kw name="Reconfigure_Topology_Name" owner="ChangeCounter">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-18T03:05:50.868584" level="INFO">&amp;{mapping} = { DEVICE_NAME=controller-config | TOPOLOGY_NAME=example-linkstate-topology }</msg>
<var>&amp;{mapping}</var>
<arg>DEVICE_NAME=${DEVICE_NAME}</arg>
<arg>TOPOLOGY_NAME=${topology_name}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-18T03:05:50.868084" elapsed="0.000531"/>
</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-04-18T03:05:50.903306" level="INFO">${file_path_stream} = /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/../variables/bgpuser/change_counter.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:05:50.902907" elapsed="0.000429"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-18T03:05:50.904207" level="FAIL">File '/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/variables/bgpuser/change_counter.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-18T03:05:50.903921" elapsed="0.000369">File '/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/variables/bgpuser/change_counter.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-18T03:05:50.904388" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-18T03:05:50.903511" elapsed="0.000902"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-18T03:05:50.905133" level="INFO">${file_path} = /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/../variables/bgpuser/change_counter/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-18T03:05:50.904603" elapsed="0.000569"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-18T03:05:50.905502" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/variables/bgpuser/change_counter/location.uri"&gt;/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/variables/bgpuser/change_counter/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-18T03:05:50.905695" level="INFO">${template} = rests/data/odl-data-change-counter-config:data-change-counter-config=data-change-counter
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-18T03:05:50.905355" elapsed="0.000368"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:50.906179" level="INFO">rests/data/odl-data-change-counter-config:data-change-counter-config=data-change-counter
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:50.905889" elapsed="0.000340"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:50.907236" level="INFO">mapping: {'DEVICE_NAME': 'controller-config', 'TOPOLOGY_NAME': 'example-linkstate-topology'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:50.906977" elapsed="0.000306"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-18T03:05:50.907799" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-18T03:05:50.907450" elapsed="0.000376"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-18T03:05:50.908511" level="INFO">${value} = controller-config</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-18T03:05:50.908203" elapsed="0.000409"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-18T03:05:50.909613" level="INFO">${encoded} = controller-config</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-18T03:05:50.909149" elapsed="0.000492"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-18T03:05:50.909693" elapsed="0.000034"/>
</return>
<msg time="2026-04-18T03:05:50.909855" level="INFO">${encoded_value} = controller-config</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-04-18T03:05:50.908818" elapsed="0.001062"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-18T03:05:50.910073" elapsed="0.000250"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">controller-config</var>
<status status="PASS" start="2026-04-18T03:05:50.908057" elapsed="0.002309"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-18T03:05:50.910950" level="INFO">${value} = example-linkstate-topology</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-18T03:05:50.910642" elapsed="0.000335"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-18T03:05:50.911973" level="INFO">${encoded} = example-linkstate-topology</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-18T03:05:50.911516" elapsed="0.000484"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-18T03:05:50.912051" elapsed="0.000031"/>
</return>
<msg time="2026-04-18T03:05:50.912204" level="INFO">${encoded_value} = example-linkstate-topology</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-04-18T03:05:50.911174" elapsed="0.001055"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-18T03:05:50.912385" elapsed="0.000240"/>
</kw>
<var name="${key}">TOPOLOGY_NAME</var>
<var name="${value}">example-linkstate-topology</var>
<status status="PASS" start="2026-04-18T03:05:50.910482" elapsed="0.002184"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-18T03:05:50.907880" elapsed="0.004821"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-18T03:05:50.912744" elapsed="0.000027"/>
</return>
<msg time="2026-04-18T03:05:50.912902" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'controller-config', 'TOPOLOGY_NAME': 'example-linkstate-topology'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-18T03:05:50.906642" elapsed="0.006285"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:50.906303" elapsed="0.006657"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.913141" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:50.912986" elapsed="0.000210"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:50.906280" elapsed="0.006937"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:50.914035" level="INFO">${final_text} = rests/data/odl-data-change-counter-config:data-change-counter-config=data-change-counter</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:50.913368" elapsed="0.000696"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-18T03:05:50.914114" 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/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/../variables/bgpuser/change_counter.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/../variables/bgpuser/change_counter.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/../variables/bgpuser/change_counter/${file_name}.</doc>
<status status="PASS" start="2026-04-18T03:05:50.902220" elapsed="0.012021"/>
</kw>
<msg time="2026-04-18T03:05:50.914296" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:50.888805" elapsed="0.025540"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/../variables/bgpuser/change_counter.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/../variables/bgpuser/change_counter.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/../variables/bgpuser/change_counter/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.927076" 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/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/../variables/bgpuser/change_counter.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/../variables/bgpuser/change_counter.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/../variables/bgpuser/change_counter/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.940314" 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/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/../variables/bgpuser/change_counter.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/../variables/bgpuser/change_counter.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/../variables/bgpuser/change_counter/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.953944" elapsed="0.000076"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.954200" elapsed="0.000021"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.954383" elapsed="0.000020"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.954782" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:50.954629" elapsed="0.000210"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:05:50.954613" elapsed="0.000250"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.955009" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.955179" elapsed="0.000019"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:50.955347" elapsed="0.000019"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-18T03:05:50.954582" elapsed="0.000817"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-18T03:05:50.954459" 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-04-18T03:05:50.955590" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-18T03:05:50.955709" elapsed="0.000018"/>
</return>
<msg time="2026-04-18T03:05:50.955845" level="INFO">${uri} = rests/data/odl-data-change-counter-config:data-change-counter-config=data-change-counter</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from 1, by one  times.
Template variable ${j} is calculated as ${i} incremented by offset 0 ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-04-18T03:05:50.884471" elapsed="0.071404"/>
</kw>
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:50.983600" level="INFO">${file_path_stream} = /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/../variables/bgpuser/change_counter.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-04-18T03:05:50.983132" elapsed="0.000504"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-18T03:05:50.984484" level="FAIL">File '/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/variables/bgpuser/change_counter.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-04-18T03:05:50.984214" elapsed="0.000367">File '/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/variables/bgpuser/change_counter.vanadium/data.xml' does not exist.</status>
</kw>
<msg time="2026-04-18T03:05:50.984692" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-18T03:05:50.983846" elapsed="0.000872"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-18T03:05:50.985295" level="INFO">${file_path} = /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/../variables/bgpuser/change_counter/data.xml</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-18T03:05:50.984892" elapsed="0.000430"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-18T03:05:50.985668" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/variables/bgpuser/change_counter/data.xml"&gt;/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/variables/bgpuser/change_counter/data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-18T03:05:50.985844" level="INFO">${template} = &lt;data-change-counter-config xmlns="urn:opendaylight:params:xml:ns:yang:bgpcep:data-change-counter-config"&gt;
    &lt;counter-id&gt;data-change-counter&lt;/counter-id&gt;
    &lt;topology-name&gt;$TOPOLOGY_NAME&lt;/topology-...</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-18T03:05:50.985502" elapsed="0.000372"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:50.986371" level="INFO">&lt;data-change-counter-config xmlns="urn:opendaylight:params:xml:ns:yang:bgpcep:data-change-counter-config"&gt;
    &lt;counter-id&gt;data-change-counter&lt;/counter-id&gt;
    &lt;topology-name&gt;$TOPOLOGY_NAME&lt;/topology-name&gt;
&lt;/data-change-counter-config&gt;
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:50.986052" elapsed="0.000384"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="NOT RUN" start="2026-04-18T03:05:50.986955" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:50.986555" elapsed="0.000546"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:50.987636" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'controller-config', 'TOPOLOGY_NAME': 'example-linkstate-topology'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:05:50.987306" elapsed="0.000358"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:50.987132" elapsed="0.000651"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:50.986509" elapsed="0.001301"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:50.988610" level="INFO">${final_text} = &lt;data-change-counter-config xmlns="urn:opendaylight:params:xml:ns:yang:bgpcep:data-change-counter-config"&gt;
    &lt;counter-id&gt;data-change-counter&lt;/counter-id&gt;
    &lt;topology-name&gt;example-linkstate-topolog...</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:50.987977" elapsed="0.000664"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-18T03:05:50.988694" elapsed="0.000040"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/../variables/bgpuser/change_counter.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/../variables/bgpuser/change_counter.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/../variables/bgpuser/change_counter/${file_name}.</doc>
<status status="PASS" start="2026-04-18T03:05:50.982410" elapsed="0.006427"/>
</kw>
<msg time="2026-04-18T03:05:50.988895" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:50.969241" elapsed="0.019705"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/../variables/bgpuser/change_counter.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/../variables/bgpuser/change_counter.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/../variables/bgpuser/change_counter/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:51.002447" 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/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/../variables/bgpuser/change_counter.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/../variables/bgpuser/change_counter.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/../variables/bgpuser/change_counter/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:51.015029" 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/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/../variables/bgpuser/change_counter.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/../variables/bgpuser/change_counter.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/../variables/bgpuser/change_counter/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:51.028012" 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-04-18T03:05:51.028273" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:51.028466" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:51.028927" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:51.028764" elapsed="0.000220"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:05:51.028744" elapsed="0.000269"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:51.029163" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:51.029334" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:51.029502" elapsed="0.000034"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-18T03:05:51.028702" elapsed="0.000869"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-18T03:05:51.028566" elapsed="0.001034"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:51.029752" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-18T03:05:51.029831" elapsed="0.000020"/>
</return>
<msg time="2026-04-18T03:05:51.030003" level="INFO">${data} = &lt;data-change-counter-config xmlns="urn:opendaylight:params:xml:ns:yang:bgpcep:data-change-counter-config"&gt;
    &lt;counter-id&gt;data-change-counter&lt;/counter-id&gt;
    &lt;topology-name&gt;example-linkstate-topolog...</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-04-18T03:05:50.966429" elapsed="0.063705"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-18T03:05:51.031795" level="FAIL">File '/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/variables/bgpuser/change_counter/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-18T03:05:51.031445" elapsed="0.000433">File '/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/variables/bgpuser/change_counter/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-18T03:05:51.031974" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-18T03:05:51.031018" elapsed="0.000980"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:51.032341" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:51.032070" elapsed="0.000327"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:51.032919" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:05:51.032619" elapsed="0.000331"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:51.032421" elapsed="0.000565"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:51.032051" elapsed="0.000957"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-18T03:05:51.035474" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-18T03:05:51.033165" elapsed="0.002336"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-18T03:05:51.035566" elapsed="0.000034"/>
</return>
<msg time="2026-04-18T03:05:51.035740" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/../variables/bgpuser/change_counter/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-18T03:05:51.030641" elapsed="0.005126"/>
</kw>
<kw name="Put_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:51.037175" level="INFO">rests/data/odl-data-change-counter-config:data-change-counter-config=data-change-counter</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:51.036921" elapsed="0.000303"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:51.037634" level="INFO">&lt;data-change-counter-config xmlns="urn:opendaylight:params:xml:ns:yang:bgpcep:data-change-counter-config"&gt;
    &lt;counter-id&gt;data-change-counter&lt;/counter-id&gt;
    &lt;topology-name&gt;example-linkstate-topology&lt;/topology-name&gt;
&lt;/data-change-counter-config&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:51.037380" elapsed="0.000303"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:51.038079" level="INFO">{'Content-Type': 'application/xml'}</msg>
<arg>${content_type}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:51.037836" elapsed="0.000288"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:51.038514" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:51.038276" elapsed="0.000298"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-18T03:05:51.039387" level="INFO">${accumulator} = {'Content-Type': 'application/xml'}</msg>
<var>${accumulator}</var>
<arg>${first}</arg>
<doc>Returns a copy of the given dictionary.</doc>
<status status="PASS" start="2026-04-18T03:05:51.039188" elapsed="0.000224"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-18T03:05:51.039814" level="INFO">${items_to_add} = ['Accept', 'application/xml']</msg>
<var>${items_to_add}</var>
<arg>${second}</arg>
<doc>Returns items of the given ``dictionary`` as a list.</doc>
<status status="PASS" start="2026-04-18T03:05:51.039585" elapsed="0.000259"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${accumulator}</arg>
<arg>@{items_to_add}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-18T03:05:51.040000" elapsed="0.000213"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:51.040639" level="INFO">{'Content-Type': 'application/xml', 'Accept': 'application/xml'}</msg>
<arg>${accumulator}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:51.040373" elapsed="0.000310"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-18T03:05:51.040725" elapsed="0.000029"/>
</return>
<msg time="2026-04-18T03:05:51.040880" level="INFO">${headers} = {'Content-Type': 'application/xml', 'Accept': 'application/xml'}</msg>
<var>${headers}</var>
<arg>first=${content_type}</arg>
<arg>second=${accept}</arg>
<doc>Take two dicts, join them, return result. Second argument values take precedence.</doc>
<status status="PASS" start="2026-04-18T03:05:51.038783" elapsed="0.002122"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="PUT On Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:05:51.056717" level="INFO">PUT Request : url=http://10.30.170.68:8181/rests/data/odl-data-change-counter-config:data-change-counter-config=data-change-counter 
 path_url=/rests/data/odl-data-change-counter-config:data-change-counter-config=data-change-counter 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node0kakfil5cul8yhuuib3hrea271.node0', 'Content-Length': '247', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;data-change-counter-config xmlns="urn:opendaylight:params:xml:ns:yang:bgpcep:data-change-counter-config"&gt;
    &lt;counter-id&gt;data-change-counter&lt;/counter-id&gt;
    &lt;topology-name&gt;example-linkstate-topology&lt;/topology-name&gt;
&lt;/data-change-counter-config&gt; 
 </msg>
<msg time="2026-04-18T03:05:51.057769" level="INFO">PUT Response : url=http://10.30.170.68:8181/rests/data/odl-data-change-counter-config:data-change-counter-config=data-change-counter 
 status=204, reason=No Content 
 headers={} 
 body=None 
 </msg>
<msg time="2026-04-18T03:05:51.057993" level="INFO">${response} = &lt;Response [204]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<doc>Sends a PUT request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-18T03:05:51.043396" elapsed="0.014639"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:51.040979" elapsed="0.017142"/>
</branch>
<branch type="ELSE">
<kw name="PUT On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a PUT request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:51.058494" elapsed="0.000069"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:51.058171" elapsed="0.000469"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:51.040961" elapsed="0.017713"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:51.064092" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:51.060418" elapsed="0.003738"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:51.060058" elapsed="0.004147"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:51.060027" elapsed="0.004212"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:51.068092" level="INFO">204</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:51.064771" elapsed="0.003388"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:51.064318" elapsed="0.003890"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:51.064294" elapsed="0.003948"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:51.069032" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:51.068484" elapsed="0.000575"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:51.069549" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:51.069128" elapsed="0.000480"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:51.070100" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:05:51.069796" elapsed="0.000330"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:51.069631" elapsed="0.000530"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:51.069110" elapsed="0.001072"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:51.070721" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:51.070342" elapsed="0.000405"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:51.071051" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:51.070816" elapsed="0.000290"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:51.071601" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:05:51.071290" elapsed="0.000337"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:51.071130" elapsed="0.000532"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:51.070797" elapsed="0.000886"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:51.071876" elapsed="0.000351"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-18T03:05:51.072719" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:51.072398" elapsed="0.000347"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-18T03:05:51.072908" elapsed="0.002319"/>
</kw>
<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="PASS" start="2026-04-18T03:05:51.059282" elapsed="0.016010"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-18T03:05:51.075473" elapsed="0.000037"/>
</return>
<status status="PASS" start="2026-04-18T03:05:51.075362" elapsed="0.000200"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:51.075342" elapsed="0.000246"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:51.075746" elapsed="0.000048"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-18T03:05:51.075842" elapsed="0.000015"/>
</return>
<msg time="2026-04-18T03:05:51.078112" level="INFO">${response_text} = </msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>content_type=${content_type}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>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="PASS" start="2026-04-18T03:05:51.036108" elapsed="0.042041"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-18T03:05:51.078229" elapsed="0.000034"/>
</return>
<msg time="2026-04-18T03:05:51.078398" level="INFO">${response_text} = </msg>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>extension=xml</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>content_type=${HEADERS_XML}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>endline=${\n}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>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="PASS" start="2026-04-18T03:05:50.873260" elapsed="0.205361"/>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=response</arg>
<arg>mapping=${mapping}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:51.079040" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:51.078736" elapsed="0.000376"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:51.078716" elapsed="0.000421"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-18T03:05:51.079172" elapsed="0.000026"/>
</return>
<arg>${CHANGE_COUNTER_TEMPLATE_FOLDER}${/}change_counter</arg>
<arg>mapping=${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="PASS" start="2026-04-18T03:05:50.868881" elapsed="0.210418"/>
</kw>
<arg>example-linkstate-topology</arg>
<doc>Configure data change counter to count transactions affecting
${topology_name} instead of previously configured topology name.</doc>
<status status="PASS" start="2026-04-18T03:05:50.867653" elapsed="0.211709"/>
</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">
<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-04-18T03:05:51.080095" elapsed="0.000339"/>
</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-04-18T03:05:51.081337" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:51.080943" elapsed="0.000455"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:51.080924" 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-04-18T03:05:51.081621" elapsed="0.000337"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:51.088000" level="INFO">${test_skipped} = False</msg>
<var>${test_skipped}</var>
<arg>len(re.findall('SKIPPED', """${TEST_MESSAGE}""")) &gt; 0</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:51.087459" elapsed="0.000574"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-04-18T03:05:51.088276" elapsed="0.000036"/>
</return>
<status status="PASS" start="2026-04-18T03:05:51.088122" elapsed="0.000222"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:51.088098" elapsed="0.000271"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:51.088543" elapsed="0.000023"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<var>${reference}</var>
<arg>${SUITE_NAME}_${TEST_NAME}</arg>
<arg>[ /\.-]</arg>
<arg>_</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:51.088726" elapsed="0.000022"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:51.089415" elapsed="0.000030"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${msg}</var>
<arg>... click for list of related bugs or create a new one if needed (with the${newline}"${reference}"${newline}reference somewhere inside)</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:51.089645" elapsed="0.000022"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${bugs}</var>
<arg>"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=${reference}&amp;order=bug_status"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:51.089821" elapsed="0.000021"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:51.089995" elapsed="0.000019"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:51.090163" elapsed="0.000020"/>
</kw>
<doc>Report that a test failed and point to linked Bugzilla bug(s).
Linked bugs must contain the ${reference} inside comments (workaround
becasue of currently missing suitable field for external references and
not correctly working the CONTENT MATCHES filter).
Not FAILED (incl. SKIPPED) test are not reported.
This keyword must be used in the [Teardown] setting of the affected test
or as the first line of the test if FastFail module is not being
used. It reports the URL of the bug on console and also puts it
into the Robot log file.</doc>
<status status="PASS" start="2026-04-18T03:05:51.086936" elapsed="0.003305"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:51.080696" elapsed="0.009597"/>
</kw>
<doc>Test case teardown. Show linked bugs and start fast failing in case of failure.</doc>
<status status="PASS" start="2026-04-18T03:05:51.079706" elapsed="0.010629"/>
</kw>
<doc>Configure data change counter back to count transactions affecting example-linkstate-topology.</doc>
<status status="PASS" start="2026-04-18T03:05:50.762871" elapsed="0.327511"/>
</test>
<test id="s1-s1-t21" name="Delete_Bgp_Peer_Configuration" line="246">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-18T03:05:51.094122" elapsed="0.000215"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-18T03:05:51.093851" elapsed="0.000539"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:51.095588" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:51.095455" elapsed="0.000181"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:51.095434" 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-04-18T03:05:51.100621" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:51.100485" elapsed="0.000183"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:51.100467" elapsed="0.000223"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-18T03:05:51.102130" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-18T03:05:51.101565" elapsed="0.000604"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-18T03:05:51.102840" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-18T03:05:51.102400" elapsed="0.000475"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-18T03:05:51.102937" elapsed="0.000044"/>
</return>
<msg time="2026-04-18T03:05:51.103155" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-18T03:05:51.100946" elapsed="0.002243"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:51.111317" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:51.111151" elapsed="0.000234"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:51.111122" elapsed="0.000294"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:51.113179" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:51.113027" elapsed="0.000219"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:51.113001" elapsed="0.000275"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-18T03:05:51.113944" level="INFO">${karaf_connection_index} = 4</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-18T03:05:51.113495" elapsed="0.000487"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-18T03:05:51.114520" level="INFO">${current_connection_index} = 7</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:05:51.114214" elapsed="0.000366"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-18T03:05:51.154001" 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 "b "g "p "c "e "p "- "b "g "p "- "i "n "g "e "s "t "[78C- "[A[78Cm</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-18T03:05:51.115440" elapsed="0.038777"/>
</kw>
<msg time="2026-04-18T03:05:51.154451" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-18T03:05:51.154509" 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 "b "g "p "c "e "p "- "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:51.114813" elapsed="0.039766"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-18T03:05:51.188081" level="INFO">"i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "D "e "l "e "t "e "_ "B "g "p "_ "P "e "e "r "_ "C "o "n "f "i "g "u "r "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-04-18T03:05:51.155309" elapsed="0.033032"/>
</kw>
<msg time="2026-04-18T03:05:51.188777" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-18T03:05:51.188904" level="INFO">${message_wait} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "D "e "l "e "t "e "_ "...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:51.154840" elapsed="0.034109"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:51.189483" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:51.189050" elapsed="0.000509"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:51.189019" elapsed="0.000570"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:51.190089" level="INFO"> "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "D "e "l "e "t "e "_ "B "g "p "_ "P "e "e "r "_ "C "o "n "f "i "g "u "r "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-04-18T03:05:51.189746" elapsed="0.000422"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:51.190467" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:51.190238" elapsed="0.000301"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:51.190219" elapsed="0.000346"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-18T03:05:51.190603" elapsed="0.000042"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:05:51.193401" elapsed="0.000178"/>
</kw>
<msg time="2026-04-18T03:05:51.193643" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:51.192324" elapsed="0.001456"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:51.194073" elapsed="0.000079"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:51.194417" elapsed="0.000075"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-18T03:05:51.191631" elapsed="0.002997"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-18T03:05:51.190954" elapsed="0.003741"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-18T03:05:51.112594" elapsed="0.082203"/>
</kw>
<msg time="2026-04-18T03:05:51.194894" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:05:51.194946" level="INFO">${message} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "D "e "l "e "t "e "_ "...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:51.111664" elapsed="0.083323"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:05:51.195179" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-18T03:05:51.195067" elapsed="0.000174"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:51.195047" 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-04-18T03:05:51.195718" elapsed="0.000027"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:51.196114" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:05:51.196190" elapsed="0.000017"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-18T03:05:51.110663" elapsed="0.085644"/>
</kw>
<msg time="2026-04-18T03:05:51.196405" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:05:51.196450" level="INFO">${output} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "C "h "a "n "g "e "c "o "u "n "t ". "D "e "l "e "t "e "_ "...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:51.103748" elapsed="0.092741"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:51.196861" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:51.196600" elapsed="0.000315"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:51.196581" elapsed="0.000359"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-18T03:05:51.103515" elapsed="0.093457"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-18T03:05:51.103270" elapsed="0.093742"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-18T03:05:51.100121" elapsed="0.096954"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-18T03:05:51.095031" elapsed="0.102104"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:51.094567" elapsed="0.102615"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-18T03:05:51.091354" elapsed="0.105885"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-18T03:05:51.198102" level="INFO">&amp;{mapping} = { DEVICE_NAME=controller-config | BGP_NAME=example-bgp-peer | IP=10.30.170.251 | BGP_RIB_OPENCONFIG=example-bgp-rib }</msg>
<var>&amp;{mapping}</var>
<arg>DEVICE_NAME=${DEVICE_NAME}</arg>
<arg>BGP_NAME=${BGP_PEER_NAME}</arg>
<arg>IP=${TOOLS_SYSTEM_IP}</arg>
<arg>BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-18T03:05:51.197423" elapsed="0.000710"/>
</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-04-18T03:05:51.245058" level="INFO">${file_path_stream} = /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:05:51.244596" elapsed="0.000499"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-18T03:05:51.245966" level="FAIL">File '/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/variables/bgpuser/bgp_peer.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-18T03:05:51.245667" elapsed="0.000474">File '/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/variables/bgpuser/bgp_peer.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-18T03:05:51.246240" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-18T03:05:51.245286" elapsed="0.000980"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-18T03:05:51.246852" level="INFO">${file_path} = /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-18T03:05:51.246439" elapsed="0.000440"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-18T03:05:51.247220" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/variables/bgpuser/bgp_peer/location.uri"&gt;/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/variables/bgpuser/bgp_peer/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-18T03:05:51.247387" level="INFO">${template} = rests/data/openconfig-network-instance:network-instances/network-instance=global-bgp/openconfig-network-instance:protocols/protocol=openconfig-policy-types%3ABGP,$BGP_RIB_OPENCONFIG/bgp-openconfig-ext...</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-18T03:05:51.247067" elapsed="0.000348"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:51.247944" level="INFO">rests/data/openconfig-network-instance:network-instances/network-instance=global-bgp/openconfig-network-instance:protocols/protocol=openconfig-policy-types%3ABGP,$BGP_RIB_OPENCONFIG/bgp-openconfig-extensions:bgp/neighbors/neighbor=$IP
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:51.247618" elapsed="0.000426"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:51.249233" level="INFO">mapping: {'DEVICE_NAME': 'controller-config', 'BGP_NAME': 'example-bgp-peer', 'IP': '10.30.170.251', 'BGP_RIB_OPENCONFIG': 'example-bgp-rib'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:51.248966" elapsed="0.000315"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-18T03:05:51.249812" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-18T03:05:51.249471" elapsed="0.000368"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-18T03:05:51.250607" level="INFO">${value} = controller-config</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-18T03:05:51.250238" elapsed="0.000396"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-18T03:05:51.251415" level="INFO">${encoded} = controller-config</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-18T03:05:51.251179" elapsed="0.000269"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-18T03:05:51.251513" elapsed="0.000060"/>
</return>
<msg time="2026-04-18T03:05:51.251730" level="INFO">${encoded_value} = controller-config</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-04-18T03:05:51.250837" elapsed="0.000921"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-18T03:05:51.251922" elapsed="0.000282"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">controller-config</var>
<status status="PASS" start="2026-04-18T03:05:51.250091" elapsed="0.002155"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-18T03:05:51.252881" level="INFO">${value} = example-bgp-peer</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-18T03:05:51.252505" elapsed="0.000404"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-18T03:05:51.253915" level="INFO">${encoded} = example-bgp-peer</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-18T03:05:51.253447" elapsed="0.000496"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-18T03:05:51.253995" elapsed="0.000030"/>
</return>
<msg time="2026-04-18T03:05:51.254148" level="INFO">${encoded_value} = example-bgp-peer</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-04-18T03:05:51.253114" elapsed="0.001059"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-18T03:05:51.254353" elapsed="0.000273"/>
</kw>
<var name="${key}">BGP_NAME</var>
<var name="${value}">example-bgp-peer</var>
<status status="PASS" start="2026-04-18T03:05:51.252365" elapsed="0.002304"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-18T03:05:51.255253" level="INFO">${value} = 10.30.170.251</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-18T03:05:51.254928" elapsed="0.000351"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-18T03:05:51.256125" level="INFO">${encoded} = 10.30.170.251</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-18T03:05:51.255841" elapsed="0.000314"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-18T03:05:51.256207" elapsed="0.000030"/>
</return>
<msg time="2026-04-18T03:05:51.256362" level="INFO">${encoded_value} = 10.30.170.251</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-04-18T03:05:51.255475" elapsed="0.000911"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-18T03:05:51.256560" elapsed="0.000225"/>
</kw>
<var name="${key}">IP</var>
<var name="${value}">10.30.170.251</var>
<status status="PASS" start="2026-04-18T03:05:51.254786" elapsed="0.002096"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-18T03:05:51.257476" level="INFO">${value} = example-bgp-rib</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-18T03:05:51.257141" elapsed="0.000361"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-18T03:05:51.258292" level="INFO">${encoded} = example-bgp-rib</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-18T03:05:51.258043" elapsed="0.000276"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-18T03:05:51.258371" elapsed="0.000029"/>
</return>
<msg time="2026-04-18T03:05:51.258522" level="INFO">${encoded_value} = example-bgp-rib</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-04-18T03:05:51.257718" 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-04-18T03:05:51.258722" elapsed="0.000221"/>
</kw>
<var name="${key}">BGP_RIB_OPENCONFIG</var>
<var name="${value}">example-bgp-rib</var>
<status status="PASS" start="2026-04-18T03:05:51.257000" elapsed="0.001992"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-18T03:05:51.249899" elapsed="0.009129"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-18T03:05:51.259073" elapsed="0.000027"/>
</return>
<msg time="2026-04-18T03:05:51.259246" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'controller-config', 'BGP_NAME': 'example-bgp-peer', 'IP': '10.30.170.251', 'BGP_RIB_OPENCONFIG': 'example-bgp-rib'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-18T03:05:51.248601" elapsed="0.010673"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:51.248136" elapsed="0.011172"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:51.259496" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:51.259336" elapsed="0.000239"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:51.248108" elapsed="0.011490"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:51.260463" level="INFO">${final_text} = rests/data/openconfig-network-instance:network-instances/network-instance=global-bgp/openconfig-network-instance:protocols/protocol=openconfig-policy-types%3ABGP,example-bgp-rib/bgp-openconfig-extensi...</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:51.259752" elapsed="0.000747"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-18T03:05:51.260570" 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/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer/${file_name}.</doc>
<status status="PASS" start="2026-04-18T03:05:51.243721" elapsed="0.016979"/>
</kw>
<msg time="2026-04-18T03:05:51.260759" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:51.229370" elapsed="0.031442"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:51.273955" elapsed="0.000051"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:51.287590" elapsed="0.000058"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:51.301441" elapsed="0.000062"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:51.301852" elapsed="0.000031"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:51.302061" elapsed="0.000034"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:51.302692" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:51.302476" elapsed="0.000290"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:05:51.302457" elapsed="0.000344"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:51.302962" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:51.303160" 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-04-18T03:05:51.303347" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-18T03:05:51.302413" elapsed="0.000989"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-18T03:05:51.302260" elapsed="0.001172"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:51.303603" elapsed="0.000023"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-18T03:05:51.303685" elapsed="0.000018"/>
</return>
<msg time="2026-04-18T03:05:51.303855" level="INFO">${uri} = rests/data/openconfig-network-instance:network-instances/network-instance=global-bgp/openconfig-network-instance:protocols/protocol=openconfig-policy-types%3ABGP,example-bgp-rib/bgp-openconfig-extensi...</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=${location}</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-04-18T03:05:51.224617" elapsed="0.079279"/>
</kw>
<kw name="Delete_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:51.305268" level="INFO">rests/data/openconfig-network-instance:network-instances/network-instance=global-bgp/openconfig-network-instance:protocols/protocol=openconfig-policy-types%3ABGP,example-bgp-rib/bgp-openconfig-extensions:bgp/neighbors/neighbor=10.30.170.251</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:51.304962" elapsed="0.000360"/>
</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-04-18T03:05:51.323145" level="INFO">DELETE Request : url=http://10.30.170.68:8181/rests/data/openconfig-network-instance:network-instances/network-instance=global-bgp/openconfig-network-instance:protocols/protocol=openconfig-policy-types%3ABGP,example-bgp-rib/bgp-openconfig-extensions:bgp/neighbors/neighbor=10.30.170.251 
 path_url=/rests/data/openconfig-network-instance:network-instances/network-instance=global-bgp/openconfig-network-instance:protocols/protocol=openconfig-policy-types%3ABGP,example-bgp-rib/bgp-openconfig-extensions:bgp/neighbors/neighbor=10.30.170.251 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0kakfil5cul8yhuuib3hrea271.node0', 'Content-Length': '0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-18T03:05:51.323298" level="INFO">DELETE Response : url=http://10.30.170.68:8181/rests/data/openconfig-network-instance:network-instances/network-instance=global-bgp/openconfig-network-instance:protocols/protocol=openconfig-policy-types%3ABGP,example-bgp-rib/bgp-openconfig-extensions:bgp/neighbors/neighbor=10.30.170.251 
 status=204, reason=No Content 
 headers={} 
 body=None 
 </msg>
<msg time="2026-04-18T03:05:51.323611" level="INFO">${response} = &lt;Response [204]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-18T03:05:51.307873" elapsed="0.015807"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:51.305404" elapsed="0.018444"/>
</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-04-18T03:05:51.324491" elapsed="0.000124"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:51.323937" elapsed="0.000789"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:51.305380" elapsed="0.019419"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:51.333288" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:51.327589" elapsed="0.005773"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:51.326962" elapsed="0.006456"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:51.326913" elapsed="0.006543"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:51.337230" level="INFO">204</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:51.333907" elapsed="0.003392"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:51.333564" elapsed="0.003784"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:51.333516" elapsed="0.003866"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:51.338230" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:51.337662" elapsed="0.000605"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:51.338722" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:51.338365" elapsed="0.000524"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:51.339643" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:05:51.339160" elapsed="0.000523"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:51.338925" elapsed="0.000809"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:51.338340" elapsed="0.001424"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:51.340737" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:51.340041" elapsed="0.000735"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:51.341136" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:51.340875" elapsed="0.000319"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:51.341703" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:05:51.341384" elapsed="0.000345"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:51.341218" elapsed="0.000547"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:51.340849" elapsed="0.000938"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:51.341951" elapsed="0.000353"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-18T03:05:51.342801" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:51.342477" elapsed="0.000350"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-18T03:05:51.342990" elapsed="0.002530"/>
</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="PASS" start="2026-04-18T03:05:51.325865" elapsed="0.019746"/>
</kw>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-18T03:05:51.345666" elapsed="0.000042"/>
</return>
<msg time="2026-04-18T03:05:51.348001" level="INFO">${response_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="PASS" start="2026-04-18T03:05:51.304312" elapsed="0.043716"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-18T03:05:51.348130" elapsed="0.000029"/>
</return>
<arg>${BGP_VARIABLES_FOLDER}${/}bgp_peer</arg>
<arg>mapping=${mapping}</arg>
<doc>Resolve URI from folder, issue DELETE request.</doc>
<status status="PASS" start="2026-04-18T03:05:51.198372" elapsed="0.149887"/>
</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">
<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-04-18T03:05:51.348950" elapsed="0.000275"/>
</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-04-18T03:05:51.350090" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:51.349699" elapsed="0.000453"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:51.349680" elapsed="0.000497"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>'${SetupUtils__Known_Bug_ID}' != ''</arg>
<arg>Set_Known_Bug_Id</arg>
<arg>${EMPTY}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:51.350326" elapsed="0.000343"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:51.357603" level="INFO">${test_skipped} = False</msg>
<var>${test_skipped}</var>
<arg>len(re.findall('SKIPPED', """${TEST_MESSAGE}""")) &gt; 0</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:51.357141" elapsed="0.000492"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-04-18T03:05:51.357866" elapsed="0.000030"/>
</return>
<status status="PASS" start="2026-04-18T03:05:51.357715" elapsed="0.000212"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:51.357695" elapsed="0.000257"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:51.358108" elapsed="0.000022"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<var>${reference}</var>
<arg>${SUITE_NAME}_${TEST_NAME}</arg>
<arg>[ /\.-]</arg>
<arg>_</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:51.358286" elapsed="0.000021"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:51.358460" elapsed="0.000020"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${msg}</var>
<arg>... click for list of related bugs or create a new one if needed (with the${newline}"${reference}"${newline}reference somewhere inside)</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:51.358648" elapsed="0.000022"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${bugs}</var>
<arg>"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=${reference}&amp;order=bug_status"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:51.358820" elapsed="0.000020"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:51.359056" elapsed="0.000021"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:51.359226" elapsed="0.000020"/>
</kw>
<doc>Report that a test failed and point to linked Bugzilla bug(s).
Linked bugs must contain the ${reference} inside comments (workaround
becasue of currently missing suitable field for external references and
not correctly working the CONTENT MATCHES filter).
Not FAILED (incl. SKIPPED) test are not reported.
This keyword must be used in the [Teardown] setting of the affected test
or as the first line of the test if FastFail module is not being
used. It reports the URL of the bug on console and also puts it
into the Robot log file.</doc>
<status status="PASS" start="2026-04-18T03:05:51.356809" elapsed="0.002494"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:51.349465" elapsed="0.009890"/>
</kw>
<doc>Test case teardown. Show linked bugs and start fast failing in case of failure.</doc>
<status status="PASS" start="2026-04-18T03:05:51.348588" elapsed="0.010808"/>
</kw>
<doc>Revert the BGP configuration to the original state: without any configured peers.</doc>
<status status="PASS" start="2026-04-18T03:05:51.090748" elapsed="0.268691"/>
</test>
<kw name="Teardown_Everything" type="TEARDOWN">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Search_And_Kill_Remote_Python" owner="KillPythonTool">
<kw name="Search_For_Remote_Python_Processes" owner="KillPythonTool">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-18T03:05:51.361743" level="INFO">Executing command 'ps -elf | egrep python | egrep 'play.py' | egrep -v grep'.</msg>
<msg time="2026-04-18T03:05:51.384222" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-18T03:05:51.384437" level="INFO">${processes} = </msg>
<var>${processes}</var>
<arg>ps -elf | egrep python | egrep ${filter} | egrep -v grep</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-18T03:05:51.361593" elapsed="0.022882"/>
</kw>
<return>
<value>${processes}</value>
<status status="PASS" start="2026-04-18T03:05:51.384602" elapsed="0.000070"/>
</return>
<msg time="2026-04-18T03:05:51.384873" level="INFO">${processes} = </msg>
<var>${processes}</var>
<arg>${filter}</arg>
<doc>Only searches for the list of processes, in case something else than kill has to be done with them.</doc>
<status status="PASS" start="2026-04-18T03:05:51.361302" elapsed="0.023606"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:51.385640" level="INFO"/>
<arg>${processes}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:51.385189" elapsed="0.000511"/>
</kw>
<kw name="Kill_Remote_Processes" owner="KillPythonTool">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-18T03:05:51.387074" level="INFO">Length is 0.</msg>
<msg time="2026-04-18T03:05:51.387227" level="INFO">${arg_length} = 0</msg>
<var>${arg_length}</var>
<arg>${pself_lines}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-18T03:05:51.386622" elapsed="0.000655"/>
</kw>
<if>
<branch type="IF" condition="${arg_length} == 0">
<return>
<status status="PASS" start="2026-04-18T03:05:51.387636" elapsed="0.000039"/>
</return>
<status status="PASS" start="2026-04-18T03:05:51.387413" elapsed="0.000305"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:51.387379" elapsed="0.000374"/>
</if>
<kw name="Execute Command" owner="SSHLibrary">
<var>${commands}</var>
<arg>echo '${pself_lines}' | awk '{print "kill -${signal}",$4}'</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:51.387980" elapsed="0.000031"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${commands}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:51.388253" elapsed="0.000030"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${stdout}</var>
<var>${stderr}</var>
<arg>echo 'set -exu; ${commands}' | sudo sh</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:51.388612" elapsed="0.000048"/>
</kw>
<arg>${processes}</arg>
<doc>Kill processes by PIDs from given list (no-op if the list is empty), using specified signal. Log the kill commands used.</doc>
<status status="PASS" start="2026-04-18T03:05:51.386147" elapsed="0.002635"/>
</kw>
<arg>'play\.py'</arg>
<doc>The main keyword. Search for processes, Log the list of them, kill them.</doc>
<status status="PASS" start="2026-04-18T03:05:51.361000" elapsed="0.027858"/>
</kw>
<arg>KillPythonTool.Search_And_Kill_Remote_Python</arg>
<arg>'play\.py'</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:51.360484" elapsed="0.028437"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get_Sysstat_Statistics" owner="Utils">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-18T03:05:51.390512" level="INFO">index=7
host=10.30.170.251
alias=None
port=22
timeout=10 seconds
newline=

prompt=&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-18T03:05:51.390684" level="INFO">${current_connection} = index=7
host=10.30.170.251
alias=None
port=22
timeout=10 seconds
newline=

prompt=&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-18T03:05:51.390335" elapsed="0.000386"/>
</kw>
<kw name="Open_Connection_To_ODL_System" owner="SSHKeywords">
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-18T03:05:51.392851" level="INFO">${odl_connection} = 8</msg>
<var>${odl_connection}</var>
<arg>${ip_address}</arg>
<arg>prompt=${ODL_SYSTEM_PROMPT}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-18T03:05:51.391856" elapsed="0.001062"/>
</kw>
<kw name="Flexible_Controller_Login" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-18T03:05:51.396285" level="INFO">Length is 0.</msg>
<msg time="2026-04-18T03:05:51.396399" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-18T03:05:51.395727" elapsed="0.000705"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:51.396765" elapsed="0.000493"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-18T03:05:51.398646" level="INFO">Logging into '10.30.170.68:22' as 'jenkins'.</msg>
<msg time="2026-04-18T03:05:51.768647" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Sat Apr 18 03:05:34 UTC 2026

  System load:  0.68               Processes:             130
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 8%                 IPv4 address for ens3: 10.30.170.68
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Sat Apr 18 03:05:37 2026 from 10.30.171.5
[?2004h[jenkins@releng-35801-190-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-18T03:05:51.398166" elapsed="0.370772"/>
</kw>
<msg time="2026-04-18T03:05:51.769051" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:51.397504" elapsed="0.371670"/>
</kw>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-18T03:05:51.394968" elapsed="0.374355"/>
</kw>
<msg time="2026-04-18T03:05:51.769400" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Flexible SSH Login</arg>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:51.393928" elapsed="0.375560"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-18T03:05:51.393411" elapsed="0.376249"/>
</kw>
<return>
<value>${odl_connection}</value>
<status status="PASS" start="2026-04-18T03:05:51.769757" elapsed="0.000075"/>
</return>
<arg>${ip_address}</arg>
<doc>Open a connection to the ODL system at 10.30.170.68 and return its identifier.</doc>
<status status="PASS" start="2026-04-18T03:05:51.391076" elapsed="0.378987"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-18T03:05:51.772229" level="INFO">sar -A -f /var/log/sa/sa*</msg>
<arg>sar -A -f /var/log/sa/sa*</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-18T03:05:51.770386" elapsed="0.001927"/>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-18T03:05:51.776810" level="INFO">[?2004lCannot open /var/log/sa/sa*: No such file or directory
[?2004h[jenkins@releng-35801-190-0-builder-0 ~]&gt;</msg>
<msg time="2026-04-18T03:05:51.776915" level="INFO">${output} = [?2004lCannot open /var/log/sa/sa*: No such file or directory
[?2004h[jenkins@releng-35801-190-0-builder-0 ~]&gt;</msg>
<var>${output}</var>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="PASS" start="2026-04-18T03:05:51.772637" elapsed="0.004309"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:51.777430" level="INFO">[?2004lCannot open /var/log/sa/sa*: No such file or directory
[?2004h[jenkins@releng-35801-190-0-builder-0 ~]&gt;</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:51.777117" elapsed="0.000362"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-18T03:05:51.777653" elapsed="0.000184"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-18T03:05:51.777880" elapsed="0.000030"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:05:51.781420" elapsed="0.000164"/>
</kw>
<msg time="2026-04-18T03:05:51.781627" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:51.780834" elapsed="0.000855"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:51.781855" elapsed="0.000022"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:51.782022" elapsed="0.000021"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-18T03:05:51.778234" elapsed="0.003870"/>
</kw>
<doc>Store current connection index, open new connection to ip_address. Run command to get sysstat results from script,
which is running on all children nodes. Returns cpu, network, memory usage statistics from the node for each 10 minutes
that node was running. Used for debug purposes. Returns whole output of sysstat.</doc>
<status status="PASS" start="2026-04-18T03:05:51.389918" elapsed="0.392278"/>
</kw>
<arg>Utils.Get_Sysstat_Statistics</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:51.389150" elapsed="0.393093"/>
</kw>
<kw name="Delete All Sessions" owner="RequestsLibrary">
<msg time="2026-04-18T03:05:51.782467" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-04-18T03:05:51.782392" elapsed="0.000327"/>
</kw>
<kw name="Close All Connections" owner="SSHLibrary">
<doc>Closes all open connections.</doc>
<status status="PASS" start="2026-04-18T03:05:51.782876" elapsed="0.000390"/>
</kw>
<doc>Make sure Python tool was killed and tear down imported Resources.</doc>
<status status="PASS" start="2026-04-18T03:05:51.360249" elapsed="0.423077"/>
</kw>
<doc>BGP performance of ingesting from 1 iBGP peer, data change counter is used.

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

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


This suite uses play.py as single iBGP peer.
The suite only looks at example-ipv4-topology, so RIB is not examined.

This suite requires odl-bgpcep-data-change-counter to be installed so
make sure it is added to "install-features" of any jobs that are going
to invoke it.

The suite consists of two halves, differing on which side initiates BGP connection.
Data change counter is a lightweight way to detect "work is being done".
WaitUtils provide a nice Keyword to wait for stability, but it needs
initial value, that is why Store_Change_Count appears just before work-inducing action.
The time for Wait_For_Stable_* cases to finish is the main performance metric.
After waiting for stability is done, full check on number of prefixes present is performed.

Brief description how to configure BGP peer can be found here:
https://wiki.opendaylight.org/view/BGP_LS_PCEP:User_Guide#BGP_Peer
http://docs.opendaylight.org/en/stable-boron/user-guide/bgp-user-guide.html#bgp-peering

TODO: Currently, if a bug causes zero increase of data changes,
affected test cases will wait for max time. Reconsider.
If zero increase is allowed as stable, higher number of repetitions should be required.

Additionally this test suite is not compatible with Helium and Hydrogen
releases as they don't include data change counter feature.
Use the other version of the suite (singlepeer_prefixcount.robot) to test them.</doc>
<status status="FAIL" start="2026-04-18T03:05:36.222553" elapsed="15.560808"/>
</suite>
<suite id="s1-s2" name="Singlepeer Prefixcount" source="/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/singlepeer_prefixcount.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-04-18T03:05:51.869388" level="INFO">${SuiteFastFail} = False</msg>
<arg>${SuiteFastFail}</arg>
<arg>False</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-18T03:05:51.865212" elapsed="0.004230"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-04-18T03:05:51.864917" elapsed="0.004594"/>
</kw>
<kw name="Setup_Karaf_Keywords" owner="KarafKeywords">
<kw name="ClusterManagement_Setup" owner="ClusterManagement">
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-18T03:05:51.874350" level="INFO">${already_done} = False</msg>
<var>${already_done}</var>
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>False</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="PASS" start="2026-04-18T03:05:51.870663" elapsed="0.003714"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-04-18T03:05:51.874603" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:51.874464" elapsed="0.000185"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:51.874439" elapsed="0.000234"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:51.875185" level="INFO">${ClusterManagement__has_setup_run} = True</msg>
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>True</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-18T03:05:51.874831" elapsed="0.000398"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-18T03:05:51.875721" level="INFO">${cluster_size} = 1</msg>
<var>${cluster_size}</var>
<arg>\${NUM_ODL_SYSTEM}</arg>
<arg>1</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="PASS" start="2026-04-18T03:05:51.875393" elapsed="0.000355"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Convert To Integer" owner="BuiltIn">
<arg>${cluster_size}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-18T03:05:51.876256" elapsed="0.000299"/>
</kw>
<msg time="2026-04-18T03:05:51.876697" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:05:51.876746" level="INFO">${possibly_int_of_members} = 1</msg>
<var>${status}</var>
<var>${possibly_int_of_members}</var>
<arg>BuiltIn.Convert_To_Integer</arg>
<arg>${cluster_size}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:51.875916" elapsed="0.000853"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-18T03:05:51.877314" level="INFO">${int_of_members} = 1</msg>
<var>${int_of_members}</var>
<arg>'${status}' != 'PASS'</arg>
<arg>${1}</arg>
<arg>${possibly_int_of_members}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-18T03:05:51.876943" elapsed="0.000397"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-18T03:05:51.878377" level="INFO">@{member_index_list} = [ ]</msg>
<var>@{member_index_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-18T03:05:51.878110" elapsed="0.000294"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-18T03:05:51.878835" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-18T03:05:51.878574" elapsed="0.000288"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-18T03:05:51.879318" level="INFO">&amp;{index_to_ip_mapping} = { }</msg>
<var>&amp;{index_to_ip_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-18T03:05:51.879029" elapsed="0.000315"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="ClusterManagement__Include_Member_Index" owner="ClusterManagement">
<kw name="Append To List" owner="Collections">
<arg>${member_index_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-18T03:05:51.882750" elapsed="0.000214"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:51.883464" level="INFO">${member_ip} = 10.30.170.68</msg>
<var>${member_ip}</var>
<arg>${ODL_SYSTEM_${index}_IP}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:05:51.883126" elapsed="0.000364"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${index_to_ip_mapping}</arg>
<arg>${index}</arg>
<arg>${member_ip}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-18T03:05:51.883662" elapsed="0.000230"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:51.884714" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:05:51.884383" elapsed="0.000358"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-18T03:05:51.884786" elapsed="0.000038"/>
</return>
<msg time="2026-04-18T03:05:51.884946" level="INFO">${session_alias} = ClusterManagement__session_1</msg>
<var>${session_alias}</var>
<arg>member_index=${index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-18T03:05:51.884090" elapsed="0.000885"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:05:51.885744" level="INFO">Creating Session using : alias=ClusterManagement__session_1, url=http://10.30.170.68:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x74a7f4494dd0&gt;, timeout=5, proxies=None, verify=False,                     debug=0 </msg>
<arg>${session_alias}</arg>
<arg>http://${member_ip}:${RESTCONFPORT}</arg>
<arg>auth=${AUTH}</arg>
<arg>timeout=${http_timeout}</arg>
<arg>max_retries=${http_retries}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="PASS" start="2026-04-18T03:05:51.885133" elapsed="0.000754"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${session_list}</arg>
<arg>${session_alias}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-18T03:05:51.886054" elapsed="0.000195"/>
</kw>
<arg>${index}</arg>
<arg>${member_index_list}</arg>
<arg>${session_list}</arg>
<arg>${index_to_ip_mapping}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Add a corresponding item based on index into the last three arguments.
Create the Http session whose alias is added to list.</doc>
<status status="PASS" start="2026-04-18T03:05:51.882140" elapsed="0.004169"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-18T03:05:51.881680" elapsed="0.004674"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="PASS" start="2026-04-18T03:05:51.879400" elapsed="0.006986"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:51.886984" level="INFO">${ClusterManagement__member_index_list} = [1]</msg>
<arg>\${ClusterManagement__member_index_list}</arg>
<arg>${member_index_list}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-18T03:05:51.886580" elapsed="0.000448"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:51.887606" level="INFO">${ClusterManagement__index_to_ip_mapping} = {1: '10.30.170.68'}</msg>
<arg>\${ClusterManagement__index_to_ip_mapping}</arg>
<arg>${index_to_ip_mapping}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-18T03:05:51.887192" elapsed="0.000497"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:51.888250" level="INFO">${ClusterManagement__session_list} = ['ClusterManagement__session_1']</msg>
<arg>\${ClusterManagement__session_list}</arg>
<arg>${session_list}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-18T03:05:51.887856" elapsed="0.000437"/>
</kw>
<arg>int_of_members=${int_of_members}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Construct index list, session list and IP mapping, publish them as suite variables.</doc>
<status status="PASS" start="2026-04-18T03:05:51.877631" elapsed="0.010719"/>
</kw>
<arg>http_timeout=${http_timeout}</arg>
<doc>Detect repeated call, or detect number of members and initialize derived suite variables.
Http sessions are created with parameters to not waste time when ODL is no accepting connections properly.</doc>
<status status="PASS" start="2026-04-18T03:05:51.870295" elapsed="0.018112"/>
</kw>
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:51.888608" elapsed="0.000042"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:51.888475" elapsed="0.000209"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:51.888456" elapsed="0.000251"/>
</if>
<kw name="Run_Bash_Command_On_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-18T03:05:51.891897" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-18T03:05:51.891501" elapsed="0.000423"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-18T03:05:51.892377" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-18T03:05:51.892084" elapsed="0.000319"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-18T03:05:51.892447" elapsed="0.000029"/>
</return>
<msg time="2026-04-18T03:05:51.892619" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-18T03:05:51.891175" elapsed="0.001496"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-18T03:05:51.893731" level="INFO">${member_ip} = 10.30.170.68</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-18T03:05:51.893435" elapsed="0.000323"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-18T03:05:51.894505" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-18T03:05:51.898378" elapsed="0.000748"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:51.900068" level="INFO">Attempting to execute command "iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save" on remote system "10.30.170.68" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:51.899390" elapsed="0.000782"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-18T03:05:51.901366" level="INFO">${conn_id} = 1</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-18T03:05:51.900439" elapsed="0.000979"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-18T03:05:51.903273" level="INFO">Length is 0.</msg>
<msg time="2026-04-18T03:05:51.903453" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-18T03:05:51.902760" elapsed="0.000736"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:51.903874" elapsed="0.000462"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-18T03:05:51.905656" level="INFO">Logging into '10.30.170.68:22' as 'jenkins'.</msg>
<msg time="2026-04-18T03:05:52.211457" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Sat Apr 18 03:05:34 UTC 2026

  System load:  0.68               Processes:             130
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 8%                 IPv4 address for ens3: 10.30.170.68
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Sat Apr 18 03:05:51 2026 from 10.30.171.5
[?2004h[jenkins@releng-35801-190-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-18T03:05:51.905193" elapsed="0.306496"/>
</kw>
<msg time="2026-04-18T03:05:52.211769" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:51.904743" elapsed="0.307173"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-18T03:05:51.901871" elapsed="0.310187"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-18T03:05:52.212929" level="INFO">Executing command 'iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save'.</msg>
<msg time="2026-04-18T03:05:52.225889" level="INFO">Command exited with return code 4.</msg>
<msg time="2026-04-18T03:05:52.226207" level="INFO">${stdout} = </msg>
<msg time="2026-04-18T03:05:52.226629" level="INFO">${stderr} = iptables v1.8.7 (nf_tables): unknown option "--dport"
Try `iptables -h' or 'iptables --help' for more information.
iptables-save v1.8.7 (nf_tables): Could not fetch rule set generation id: Permission ...</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-18T03:05:52.212408" elapsed="0.014340"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-18T03:05:52.227463" elapsed="0.001226"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:52.231311" level="INFO">iptables v1.8.7 (nf_tables): unknown option "--dport"
Try `iptables -h' or 'iptables --help' for more information.
iptables-save v1.8.7 (nf_tables): Could not fetch rule set generation id: Permission denied (you must be root)</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:52.230039" elapsed="0.001565"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-18T03:05:52.232515" elapsed="0.000192"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:52.231977" elapsed="0.000899"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:52.231922" elapsed="0.001093"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-18T03:05:52.233739" elapsed="0.000138"/>
</return>
<status status="PASS" start="2026-04-18T03:05:52.233206" elapsed="0.000803"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:52.233166" elapsed="0.000882"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-18T03:05:52.234108" elapsed="0.000016"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:52.237441" elapsed="0.000479"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-18T03:05:52.238201" elapsed="0.000289"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-18T03:05:52.238771" elapsed="0.000225"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-18T03:05:52.234605" elapsed="0.004460"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-18T03:05:51.896455" elapsed="0.342784"/>
</kw>
<msg time="2026-04-18T03:05:52.239296" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:51.895820" elapsed="0.343530"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-18T03:05:51.895321" elapsed="0.344112"/>
</kw>
<msg time="2026-04-18T03:05:52.239475" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:51.894812" elapsed="0.344710"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:52.242261" elapsed="0.000324"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-18T03:05:52.242751" elapsed="0.000145"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-18T03:05:52.243050" elapsed="0.000097"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-18T03:05:52.239847" elapsed="0.003350"/>
</kw>
<msg time="2026-04-18T03:05:52.243288" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-18T03:05:51.893985" elapsed="0.349327"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:52.243763" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:52.243491" elapsed="0.000315"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-18T03:05:52.243848" elapsed="0.000030"/>
</return>
<arg>command=${command}</arg>
<arg>member_index=${index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-18T03:05:51.893073" elapsed="0.350898"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-18T03:05:51.892871" elapsed="0.351178"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-18T03:05:51.892732" elapsed="0.351363"/>
</for>
<arg>iptables -I INPUT -p tcp --dport ${KARAF_SHELL_PORT} -j ACCEPT; iptables-save</arg>
<doc>Cycle through indices (or all), run command on each.</doc>
<status status="PASS" start="2026-04-18T03:05:51.888933" elapsed="0.355222"/>
</kw>
<kw name="Comment" owner="BuiltIn">
<arg>First connections to Karaf console may fail, so WUKS is used. TODO: Track as a Bug.</arg>
<doc>Displays the given messages in the log file as keyword arguments.</doc>
<status status="PASS" start="2026-04-18T03:05:52.244316" elapsed="0.000291"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:52.258288" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:52.258178" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:52.258158" elapsed="0.000200"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-18T03:05:52.258670" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-18T03:05:52.258514" elapsed="0.000291"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:52.259221" level="INFO">{}</msg>
<arg>${connection_index_dict}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:52.258962" elapsed="0.000305"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:52.259687" level="INFO">1</msg>
<arg>${member_index}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:52.259422" elapsed="0.000309"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-18T03:05:52.260480" level="FAIL">Dictionary does not contain key '1'.</msg>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="FAIL" start="2026-04-18T03:05:52.260259" elapsed="0.000351">Dictionary does not contain key '1'.</status>
</kw>
<msg time="2026-04-18T03:05:52.260715" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:05:52.260760" level="INFO">${old_connection_index} = Dictionary does not contain key '1'.</msg>
<var>${status}</var>
<var>${old_connection_index}</var>
<arg>Get From Dictionary</arg>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:52.259893" 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-04-18T03:05:52.261103" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:52.260859" elapsed="0.000319"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:52.260840" elapsed="0.000362"/>
</if>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-18T03:05:52.261965" level="INFO">${ip_address} = 10.30.170.68</msg>
<var>${ip_address}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-18T03:05:52.261699" elapsed="0.000293"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-04-18T03:05:52.262040" elapsed="0.000028"/>
</return>
<msg time="2026-04-18T03:05:52.262189" level="INFO">${odl_ip} = 10.30.170.68</msg>
<var>${odl_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-04-18T03:05:52.261406" elapsed="0.000808"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>${odl_ip}</arg>
<arg>port=${KARAF_SHELL_PORT}</arg>
<arg>prompt=${KARAF_PROMPT_LOGIN}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-18T03:05:52.262370" elapsed="0.000421"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-18T03:05:52.263071" level="INFO">index=4
host=10.30.170.68
alias=None
port=8101
timeout=10 seconds
newline=

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

prompt=opendaylight-user
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_error...</msg>
<var>${karaf_connection_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-18T03:05:52.262965" 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-04-18T03:05:52.263347" elapsed="0.002202"/>
</kw>
<kw name="Login" owner="SSHLibrary">
<msg time="2026-04-18T03:05:52.265996" level="INFO">Logging into '10.30.170.68:8101' as 'karaf'.</msg>
<msg time="2026-04-18T03:05:52.461676" level="INFO">Read output: [33m                                                                                           
[33m    ________                       ________                .__  .__       .__     __       
[33m    \_____  \ ______   ____   ____ \______ \ _____  ___.__.|  | |__| ____ |  |___/  |_     
[33m     /   |   \\____ \_/ __ \ /    \ |    |  \\__  \&lt;   |  ||  | |  |/ ___\|  |  \   __\    
[33m    /    |    \  |_&gt; &gt;  ___/|   |  \|    `   \/ __ \\___  ||  |_|  / /_/  &gt;   Y  \  |      
[33m    \_______  /   __/ \___  &gt;___|  /_______  (____  / ____||____/__\___  /|___|  /__|      
[33m            \/|__|        \/     \/        \/     \/\/            /_____/      \/          
[33m                                                                                           

Hit '[1m&lt;tab&gt;[0m' for a list of available commands
and '[1m[cmd] --help[0m' for help on a specific command.
Hit '[1m&lt;ctrl-d&gt;[0m' or type '[1msystem:shutdown[0m' or '[1mlogout[0m' to shutdown OpenDaylight.

[?1h=[90m~[0m                                                                                [?2004hopendaylight-user</msg>
<arg>${KARAF_USER}</arg>
<arg>${KARAF_PASSWORD}</arg>
<arg>loglevel=${loglevel}</arg>
<doc>Logs into the SSH server with the given ``username`` and ``password``.</doc>
<status status="PASS" start="2026-04-18T03:05:52.265736" elapsed="0.196086"/>
</kw>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:52.465873" elapsed="0.000388"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-18T03:05:52.466433" elapsed="0.000200"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-18T03:05:52.466792" elapsed="0.000119"/>
</kw>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-18T03:05:52.463082" elapsed="0.003884"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-18T03:05:52.462340" elapsed="0.004674"/>
</kw>
<arg>member_index=${index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for ${member_index},
close the previous connection. In any case create a new connection
to karaf console for ${member_index}, set correct prompt set and login to karaf console.
Store connection index for ${member_index} and restore the previous active connection.</doc>
<status status="PASS" start="2026-04-18T03:05:52.257900" elapsed="0.209166"/>
</kw>
<arg>3s</arg>
<arg>1s</arg>
<arg>Open_Controller_Karaf_Console_On_Background</arg>
<arg>member_index=${index}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-04-18T03:05:52.245353" elapsed="0.221765"/>
</kw>
<arg>BuiltIn.Wait_Until_Keyword_Succeeds</arg>
<arg>3s</arg>
<arg>1s</arg>
<arg>Open_Controller_Karaf_Console_On_Background</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:52.244979" elapsed="0.222208"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-18T03:05:52.244817" elapsed="0.222420"/>
</iter>
<var>${index}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="PASS" start="2026-04-18T03:05:52.244668" elapsed="0.222610"/>
</for>
<arg>http_timeout=${http_timeout}</arg>
<doc>Initialize ClusterManagement. Open ssh karaf connections to each ODL.</doc>
<status status="PASS" start="2026-04-18T03:05:51.869832" elapsed="0.597512"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Test_Suite_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:52.470253" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:52.470125" elapsed="0.000179"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:52.470101" elapsed="0.000228"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:52.475328" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:52.475221" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:52.475203" elapsed="0.000194"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-18T03:05:52.476397" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-18T03:05:52.475981" elapsed="0.000445"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-18T03:05:52.476925" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-18T03:05:52.476623" elapsed="0.000330"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-18T03:05:52.476997" elapsed="0.000037"/>
</return>
<msg time="2026-04-18T03:05:52.477186" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-18T03:05:52.475645" 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-04-18T03:05:52.482707" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:52.482597" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:52.482578" elapsed="0.000197"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:52.484050" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:52.483923" elapsed="0.000174"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:52.483905" elapsed="0.000214"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-18T03:05:52.484608" level="INFO">${karaf_connection_index} = 4</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-18T03:05:52.484267" elapsed="0.000369"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-18T03:05:52.485037" level="INFO">${current_connection_index} = None</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:05:52.484802" elapsed="0.000262"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-18T03:05:52.529335" 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 "/ "b "g "p "[78Cc "[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-04-18T03:05:52.485773" elapsed="0.043770"/>
</kw>
<msg time="2026-04-18T03:05:52.529723" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-18T03:05:52.529771" level="INFO">${message_write} = @root&gt;log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "s "u "i "t "e "[C "/ "w "/ "w "o "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:52.485248" elapsed="0.044562"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-18T03:05:52.614715" level="INFO">"p "- "c "s "i "t "- "1 "n "o "d "e "- "b "g "p "- "i "n "g "e "s "t "- "m "i "x "e "d "- "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 "/ "b "g "p "c "e "p "/ "b "g "p "i "n "g "e "s "t "/ "s "[78Ci "[A[78Cn
 "g "l "e "p "e "e "r "_ "p "r "e "f "i "x "c "o "u "n "t ". "r "o "b "o "t "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-18T03:05:52.530816" elapsed="0.084152"/>
</kw>
<msg time="2026-04-18T03:05:52.615169" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-18T03:05:52.615223" level="INFO">${message_wait} =  "p "- "c "s "i "t "- "1 "n "o "d "e "- "b "g "p "- "i "n "g "e "s "t "- "m "i "x "e "d "- "a "l "l "- "v "a "n "a "d "i ...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:52.530146" elapsed="0.085117"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:52.615748" elapsed="0.000054"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:52.615384" elapsed="0.000533"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:52.615349" elapsed="0.000600"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:52.616659" level="INFO"> "p "- "c "s "i "t "- "1 "n "o "d "e "- "b "g "p "- "i "n "g "e "s "t "- "m "i "x "e "d "- "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 "/ "b "g "p "c "e "p "/ "b "g "p "i "n "g "e "s "t "/ "s "[78Ci "[A[78Cn
 "g "l "e "p "e "e "r "_ "p "r "e "f "i "x "c "o "u "n "t ". "r "o "b "o "t "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:52.616118" elapsed="0.000640"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:52.617088" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:52.616837" elapsed="0.000482"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:52.616815" elapsed="0.000536"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-18T03:05:52.617391" elapsed="0.000042"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:52.619957" elapsed="0.000497"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-18T03:05:52.621077" elapsed="0.000371"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-18T03:05:52.621813" elapsed="0.000244"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-18T03:05:52.619101" elapsed="0.003050"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-18T03:05:52.617742" elapsed="0.004571"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-18T03:05:52.483628" elapsed="0.138802"/>
</kw>
<msg time="2026-04-18T03:05:52.622542" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:05:52.622590" level="INFO">${message} =  "p "- "c "s "i "t "- "1 "n "o "d "e "- "b "g "p "- "i "n "g "e "s "t "- "m "i "x "e "d "- "a "l "l "- "v "a "n "a "d "i ...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:52.482936" elapsed="0.139692"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:05:52.622830" elapsed="0.000029"/>
</return>
<status status="PASS" start="2026-04-18T03:05:52.622708" elapsed="0.000186"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:52.622688" elapsed="0.000231"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:52.623361" 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-04-18T03:05:52.623751" elapsed="0.000030"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:05:52.623832" elapsed="0.000016"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-18T03:05:52.482292" elapsed="0.141687"/>
</kw>
<msg time="2026-04-18T03:05:52.624108" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:05:52.624173" level="INFO">${output} =  "p "- "c "s "i "t "- "1 "n "o "d "e "- "b "g "p "- "i "n "g "e "s "t "- "m "i "x "e "d "- "a "l "l "- "v "a "n "a "d "i ...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:52.477656" elapsed="0.146570"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:52.624733" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:52.624315" elapsed="0.000487"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:52.624296" elapsed="0.000589"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-18T03:05:52.477492" elapsed="0.147421"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-18T03:05:52.477294" elapsed="0.147661"/>
</for>
<arg>Starting suite ${SUITE_SOURCE}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-18T03:05:52.474927" elapsed="0.150094"/>
</kw>
<doc>Log suite name to karaf log, useful in suite setup.</doc>
<status status="PASS" start="2026-04-18T03:05:52.467997" elapsed="0.157092"/>
</kw>
<arg>KarafKeywords.Log_Test_Suite_Start_To_Controller_Karaf</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:52.467509" elapsed="0.157626"/>
</kw>
<doc>Prepare both FailFast and Karaf logging, log that the caller suite has started.
This keyword is to be used in suite setup, and without it the other keywords may not work properly.</doc>
<status status="PASS" start="2026-04-18T03:05:51.864543" elapsed="0.760646"/>
</kw>
<kw name="Create_Default_Session" owner="TemplatedRequests">
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:05:52.629746" level="INFO">Creating Session using : alias=default, url=http://10.30.170.68:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x74a7f4235210&gt;, timeout=5, 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-04-18T03:05:52.629182" elapsed="0.000743"/>
</kw>
<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-04-18T03:05:52.628730" elapsed="0.001285"/>
</kw>
<kw name="PC_Setup" owner="PrefixCounting">
<kw name="WU_Setup" owner="WaitUtils">
<kw name="SC_Setup" owner="ScalarClosures">
<kw name="Closure_From_Keyword_And_Arguments" owner="ScalarClosures">
<return>
<value>${keyword}</value>
<value>${args}</value>
<value>${kwargs}</value>
<status status="PASS" start="2026-04-18T03:05:52.631310" elapsed="0.000029"/>
</return>
<msg time="2026-04-18T03:05:52.631522" level="INFO">${sc_fail} = ['BuiltIn.Fail', [], {}]</msg>
<var>${sc_fail}</var>
<arg>BuiltIn.Fail</arg>
<doc>Turn keyword with given arguments into a scalar closure.</doc>
<status status="PASS" start="2026-04-18T03:05:52.631125" elapsed="0.000440"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:52.636183" level="INFO">${ScalarClosures__fail} = ['BuiltIn.Fail', [], {}]</msg>
<arg>${ScalarClosures__fail}</arg>
<arg>${sc_fail}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-18T03:05:52.631754" elapsed="0.004477"/>
</kw>
<kw name="Closure_From_Keyword_And_Arguments" owner="ScalarClosures">
<return>
<value>${keyword}</value>
<value>${args}</value>
<value>${kwargs}</value>
<status status="PASS" start="2026-04-18T03:05:52.636651" elapsed="0.000030"/>
</return>
<msg time="2026-04-18T03:05:52.636876" level="INFO">${sc_identity} = ['BuiltIn.Set_Variable', ['placeholder'], {}]</msg>
<var>${sc_identity}</var>
<arg>BuiltIn.Set_Variable</arg>
<arg>placeholder</arg>
<doc>Turn keyword with given arguments into a scalar closure.</doc>
<status status="PASS" start="2026-04-18T03:05:52.636429" elapsed="0.000474"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:52.641645" level="INFO">${ScalarClosures__identity} = ['BuiltIn.Set_Variable', ['placeholder'], {}]</msg>
<arg>${ScalarClosures__identity}</arg>
<arg>${sc_identity}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-18T03:05:52.637081" elapsed="0.004627"/>
</kw>
<doc>Resource setup. Create closures and assign them to suite variables.</doc>
<status status="PASS" start="2026-04-18T03:05:52.630879" elapsed="0.010901"/>
</kw>
<doc>Call dependency setup. Perhaps needed.</doc>
<status status="PASS" start="2026-04-18T03:05:52.630590" elapsed="0.011238"/>
</kw>
<doc>Call dependency setups and construct suite variables.</doc>
<status status="PASS" start="2026-04-18T03:05:52.630267" elapsed="0.011606"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:05:52.642352" level="INFO">Creating Session using : alias=operational, url=http://10.30.170.68:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x74a7f291fd90&gt;, timeout=125, proxies=None, verify=False,                     debug=0 </msg>
<arg>operational</arg>
<arg>http://${ODL_SYSTEM_IP}:${RESTCONFPORT}</arg>
<arg>auth=${AUTH}</arg>
<arg>timeout=125</arg>
<arg>max_retries=0</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="PASS" start="2026-04-18T03:05:52.642029" elapsed="0.000430"/>
</kw>
<kw name="Set Default Configuration" owner="SSHLibrary">
<arg>prompt=${TOOLS_SYSTEM_PROMPT}</arg>
<doc>Update the default `configuration`.</doc>
<status status="PASS" start="2026-04-18T03:05:52.642648" elapsed="0.000189"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>${TOOLS_SYSTEM_IP}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-18T03:05:52.643000" elapsed="0.000202"/>
</kw>
<kw name="Flexible_Mininet_Login" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-18T03:05:52.644958" level="INFO">Length is 0.</msg>
<msg time="2026-04-18T03:05:52.645036" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-18T03:05:52.644644" elapsed="0.000416"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:52.645224" elapsed="0.000379"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-18T03:05:52.646483" level="INFO">Logging into '10.30.170.251:22' as 'jenkins'.</msg>
<msg time="2026-04-18T03:05:52.958295" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-153-generic x86_64)

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

 System information as of Sat Apr 18 03:05:38 UTC 2026

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


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Sat Apr 18 03:05:39 2026 from 10.30.171.5
[?2004h[jenkins@releng-35801-190-1-mininet-ovs-217-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-18T03:05:52.646164" elapsed="0.312285"/>
</kw>
<msg time="2026-04-18T03:05:52.958642" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:52.645793" elapsed="0.312928"/>
</kw>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-18T03:05:52.644172" elapsed="0.314658"/>
</kw>
<msg time="2026-04-18T03:05:52.958882" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Flexible SSH Login</arg>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:52.643766" elapsed="0.315161"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-04-18T03:05:52.643405" elapsed="0.315595"/>
</kw>
<kw name="Require_Python" owner="SSHKeywords">
<kw name="Execute_Command_Passes" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-18T03:05:52.960362" level="INFO">Executing command 'python3 --help'.</msg>
<msg time="2026-04-18T03:05:52.972508" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-18T03:05:52.972654" level="INFO">${stdout} = usage: python3 [option] ... [-c cmd | -m mod | file | -] [arg] ...
Options and arguments (and corresponding environment variables):
-b     : issue warnings about str(bytes_instance), str(bytearray_ins...</msg>
<msg time="2026-04-18T03:05:52.972700" level="INFO">${stderr} = </msg>
<msg time="2026-04-18T03:05:52.972742" level="INFO">${rc} = 0</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>${command}</arg>
<arg>return_stderr=True</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-18T03:05:52.960158" elapsed="0.012611"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:05:52.973914" level="INFO">Length is 0.</msg>
<arg>${stderr}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="PASS" start="2026-04-18T03:05:52.973622" elapsed="0.000338"/>
</kw>
<msg time="2026-04-18T03:05:52.974056" level="INFO">${emptiness_status} = PASS</msg>
<msg time="2026-04-18T03:05:52.974100" level="INFO">${result} = None</msg>
<var>${emptiness_status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${stderr}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:52.972961" elapsed="0.001161"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-18T03:05:52.974756" level="INFO">${success} = True</msg>
<var>${success}</var>
<arg>(${rc} == 0) and (("${emptiness_status}" == "PASS") or not ${stderr_must_be_empty})</arg>
<arg>True</arg>
<arg>False</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-18T03:05:52.974297" elapsed="0.000486"/>
</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">
<arg>${stdout}</arg>
<arg>${stderr}</arg>
<arg>${rc}</arg>
<doc>Log everything returned by SSHLibrary.Execute_Command</doc>
<status status="NOT RUN" start="2026-04-18T03:05:52.975228" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:52.974869" elapsed="0.000421"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:52.974845" elapsed="0.000473"/>
</if>
<if>
<branch type="IF" condition="${return_success_only}">
<return>
<value>${success}</value>
<status status="PASS" start="2026-04-18T03:05:52.975472" elapsed="0.000030"/>
</return>
<status status="PASS" start="2026-04-18T03:05:52.975373" elapsed="0.000180"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:52.975358" elapsed="0.000220"/>
</if>
<if>
<branch type="IF" condition="${success}">
<return>
<value>${stdout}</value>
<status status="NOT RUN" start="2026-04-18T03:05:52.975669" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:52.975633" elapsed="0.000075"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:05:52.975618" elapsed="0.000111"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Got rc: ${rc} or stderr was not empty: ${stderr}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:52.975873" elapsed="0.000021"/>
</kw>
<msg time="2026-04-18T03:05:52.976018" level="INFO">${passed} = True</msg>
<var>${passed}</var>
<arg>python3 --help</arg>
<doc>Execute command via the active SSH connection. For success, rc has to be zero and optionally stderr has to be empty.
Log everything, depending on arguments and success. Return either success string or stdout.
TODO: Do we want to support customizing return values the same way as SSHLibrary.Execute_Command does?</doc>
<status status="PASS" start="2026-04-18T03:05:52.959801" elapsed="0.016243"/>
</kw>
<if>
<branch type="IF" condition="${passed}">
<return>
<status status="PASS" start="2026-04-18T03:05:52.976203" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-04-18T03:05:52.976112" elapsed="0.000144"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:52.976094" elapsed="0.000185"/>
</if>
<kw name="Fatal Error" owner="BuiltIn">
<arg>Python 3 is not installed!</arg>
<doc>Stops the whole test execution.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:52.976422" elapsed="0.000021"/>
</kw>
<doc>Verify current SSH connection leads to machine with python working. Fatal fail otherwise.</doc>
<status status="PASS" start="2026-04-18T03:05:52.959348" elapsed="0.017149"/>
</kw>
<kw name="Assure_Library_Ipaddr" owner="SSHKeywords">
<kw name="Execute_Command_Passes" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-18T03:05:52.977850" level="INFO">Executing command 'bash -c 'cd "." &amp;&amp; python -c "import ipaddr"''.</msg>
<msg time="2026-04-18T03:05:53.052779" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-18T03:05:53.053169" level="INFO">${stdout} = </msg>
<msg time="2026-04-18T03:05:53.053288" level="INFO">${stderr} = </msg>
<msg time="2026-04-18T03:05:53.053387" level="INFO">${rc} = 0</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>${command}</arg>
<arg>return_stderr=True</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-18T03:05:52.977649" elapsed="0.075793"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.055695" level="INFO">Length is 0.</msg>
<arg>${stderr}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="PASS" start="2026-04-18T03:05:53.055009" elapsed="0.000797"/>
</kw>
<msg time="2026-04-18T03:05:53.056039" level="INFO">${emptiness_status} = PASS</msg>
<msg time="2026-04-18T03:05:53.056143" level="INFO">${result} = None</msg>
<var>${emptiness_status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${stderr}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:53.054066" elapsed="0.002130"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.057803" level="INFO">${success} = True</msg>
<var>${success}</var>
<arg>(${rc} == 0) and (("${emptiness_status}" == "PASS") or not ${stderr_must_be_empty})</arg>
<arg>True</arg>
<arg>False</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-18T03:05:53.056661" elapsed="0.001334"/>
</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">
<arg>${stdout}</arg>
<arg>${stderr}</arg>
<arg>${rc}</arg>
<doc>Log everything returned by SSHLibrary.Execute_Command</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.059142" elapsed="0.000062"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:53.058201" elapsed="0.001104"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.058149" elapsed="0.001219"/>
</if>
<if>
<branch type="IF" condition="${return_success_only}">
<return>
<value>${success}</value>
<status status="PASS" start="2026-04-18T03:05:53.059790" elapsed="0.000074"/>
</return>
<status status="PASS" start="2026-04-18T03:05:53.059508" elapsed="0.000442"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.059467" elapsed="0.000553"/>
</if>
<if>
<branch type="IF" condition="${success}">
<return>
<value>${stdout}</value>
<status status="NOT RUN" start="2026-04-18T03:05:53.060259" elapsed="0.000030"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:53.060172" elapsed="0.000183"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:05:53.060130" elapsed="0.000276"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Got rc: ${rc} or stderr was not empty: ${stderr}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.060792" elapsed="0.000054"/>
</kw>
<msg time="2026-04-18T03:05:53.061183" level="INFO">${passed} = True</msg>
<var>${passed}</var>
<arg>bash -c 'cd "${target_dir}" &amp;&amp; python -c "import ipaddr"'</arg>
<doc>Execute command via the active SSH connection. For success, rc has to be zero and optionally stderr has to be empty.
Log everything, depending on arguments and success. Return either success string or stdout.
TODO: Do we want to support customizing return values the same way as SSHLibrary.Execute_Command does?</doc>
<status status="PASS" start="2026-04-18T03:05:52.977216" elapsed="0.084030"/>
</kw>
<if>
<branch type="IF" condition="${passed}">
<return>
<status status="PASS" start="2026-04-18T03:05:53.061714" elapsed="0.000068"/>
</return>
<status status="PASS" start="2026-04-18T03:05:53.061414" elapsed="0.000441"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.061374" elapsed="0.000540"/>
</if>
<kw name="Put File" owner="SSHLibrary">
<arg>/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/BGPCEP/ipaddr.py</arg>
<arg>${target_dir}/</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.062275" elapsed="0.000050"/>
</kw>
<arg>target_dir=.</arg>
<doc>Tests whether ipaddr module is present on ssh-connected machine, Puts ipaddr.py to target_dir if not.</doc>
<status status="PASS" start="2026-04-18T03:05:52.976756" elapsed="0.085715"/>
</kw>
<kw name="Put File" owner="SSHLibrary">
<msg time="2026-04-18T03:05:53.096118" level="INFO">[chan 3] Opened sftp connection (server version 3)</msg>
<msg time="2026-04-18T03:05:53.112146" level="INFO">'/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../../tools/fastbgp/play.py' -&gt; '/home/jenkins//play.py'</msg>
<arg>/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../../tools/fastbgp/play.py</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="PASS" start="2026-04-18T03:05:53.062886" elapsed="0.049356"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.113345" level="INFO">${timeout} = 980.0</msg>
<var>${timeout}</var>
<arg>${TEST_DURATION_MULTIPLIER_PREFIX_COUNT_SINGLE} * (${COUNT_PREFIX_COUNT_SINGLE} * 9.0 / 10000 + 20)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:53.112687" elapsed="0.000696"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.118341" level="INFO">${bgp_filling_timeout} = 980.0</msg>
<arg>${bgp_filling_timeout}</arg>
<arg>${timeout}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-18T03:05:53.113650" elapsed="0.004739"/>
</kw>
<doc>Setup imported resources, SSH-login to tools system,
create HTTP session, put Python tool to tools system.</doc>
<status status="PASS" start="2026-04-18T03:05:51.864216" elapsed="1.254238"/>
</kw>
<test id="s1-s2-t1" name="Check_For_Empty_Ipv4_Topology_Before_Talking" line="79">
<kw name="Setup_Test_With_Logging_And_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Fail_This_Fast_On_Previous_Error" owner="FailFast">
<if>
<branch type="IF" condition="'''${SuiteFastFail}'''=='True'">
<kw name="Fail" owner="BuiltIn">
<arg>SKIPPED due to a failure in a previous fundamental test case.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.123623" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:53.123371" elapsed="0.000312"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.123347" elapsed="0.000362"/>
</if>
<doc>Mark (immediately) this test case as failed when fast-fail is enabled in suite.</doc>
<status status="PASS" start="2026-04-18T03:05:53.123171" 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-04-18T03:05:53.124798" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:53.124685" elapsed="0.000161"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.124667" 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-04-18T03:05:53.129944" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:53.129834" elapsed="0.000176"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.129815" elapsed="0.000225"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.131155" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-18T03:05:53.130707" elapsed="0.000477"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.131678" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-18T03:05:53.131352" elapsed="0.000354"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-18T03:05:53.131753" elapsed="0.000034"/>
</return>
<msg time="2026-04-18T03:05:53.131918" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-18T03:05:53.130304" elapsed="0.001639"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:53.137565" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:53.137440" elapsed="0.000173"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.137421" elapsed="0.000215"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:53.138898" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:53.138789" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.138769" elapsed="0.000198"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-18T03:05:53.139420" level="INFO">${karaf_connection_index} = 4</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-18T03:05:53.139115" elapsed="0.000333"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-18T03:05:53.139849" level="INFO">${current_connection_index} = 7</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:05:53.139626" elapsed="0.000249"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-18T03:05:53.196997" 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 "b "g "p "c "e "p "- "b "g "p "- "i "n "g "e "s "t "[78C- "[A[78Cm</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-18T03:05:53.140376" elapsed="0.056744"/>
</kw>
<msg time="2026-04-18T03:05:53.197304" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-18T03:05:53.197351" 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 "b "g "p "c "e "p "- "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:53.140038" elapsed="0.057350"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-18T03:05:53.231124" level="INFO">"i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "C "h "e "c "k "_ "F "o "r "_ "E "m "p "t "y "_ "I "p "v "4 "_ "T "o "p "o "l "o "g "y "_ "B "e "f "o "r "e "_ "T "a "l "k "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-04-18T03:05:53.198045" elapsed="0.033212"/>
</kw>
<msg time="2026-04-18T03:05:53.231452" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-18T03:05:53.231502" level="INFO">${message_wait} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "C "h "e "c "k "_ "F "...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:53.197602" elapsed="0.033962"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.231908" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:53.231657" elapsed="0.000308"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.231630" elapsed="0.000362"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.232478" level="INFO"> "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "C "h "e "c "k "_ "F "o "r "_ "E "m "p "t "y "_ "I "p "v "4 "_ "T "o "p "o "l "o "g "y "_ "B "e "f "o "r "e "_ "T "a "l "k "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-04-18T03:05:53.232143" elapsed="0.000440"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.232883" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:53.232655" elapsed="0.000284"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.232635" elapsed="0.000328"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-18T03:05:53.233004" elapsed="0.000036"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:05:53.235775" elapsed="0.000152"/>
</kw>
<msg time="2026-04-18T03:05:53.235992" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:53.234600" elapsed="0.001529"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.236419" elapsed="0.000087"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.236811" elapsed="0.000082"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-18T03:05:53.233919" elapsed="0.003096"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-18T03:05:53.233303" elapsed="0.003778"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-18T03:05:53.138451" elapsed="0.098730"/>
</kw>
<msg time="2026-04-18T03:05:53.237278" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:05:53.237323" level="INFO">${message} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "C "h "e "c "k "_ "F "...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:53.137834" elapsed="0.099578"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:05:53.237638" elapsed="0.000029"/>
</return>
<status status="PASS" start="2026-04-18T03:05:53.237504" elapsed="0.000199"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.237482" 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-04-18T03:05:53.238190" elapsed="0.000026"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.238581" elapsed="0.000027"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:05:53.238658" elapsed="0.000016"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-18T03:05:53.137094" elapsed="0.101679"/>
</kw>
<msg time="2026-04-18T03:05:53.238871" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:05:53.238918" level="INFO">${output} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "C "h "e "c "k "_ "F "...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:53.132449" elapsed="0.106507"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.239296" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:53.239035" elapsed="0.000316"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.239017" elapsed="0.000359"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-18T03:05:53.132294" elapsed="0.107108"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-18T03:05:53.132081" elapsed="0.107354"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-18T03:05:53.129428" elapsed="0.110072"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-18T03:05:53.124373" elapsed="0.115215"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:53.123912" elapsed="0.115724"/>
</kw>
<doc>Test case setup which skips on previous failure. If not, logs test case name to Karaf log.
Recommended to be used as the default test case setup.</doc>
<status status="PASS" start="2026-04-18T03:05:53.119352" elapsed="0.120341"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Ipv4_Topology_Is_Empty" owner="PrefixCounting">
<kw name="Check_Ipv4_Topology_Count" owner="PrefixCounting">
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get_Ipv4_Topology_Count" owner="PrefixCounting">
<kw name="Get_Ipv4_Topology" owner="PrefixCounting">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:05:53.252365" level="INFO">GET Request : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-18T03:05:53.252583" level="INFO">GET Response : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Set-Cookie': 'JSESSIONID=node01agv6blx930rdupfsp7wkuo902.node0; Path=/rests; HttpOnly, rememberMe=deleteMe; Path=/rests; Max-Age=0; Expires=Fri, 17-Apr-2026 03:05:53 GMT; SameSite=lax', 'Expires': 'Thu, 01 Jan 1970 00:00:00 GMT', 'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '293'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xmlns="urn:opendaylight:params:xml:ns:yang:odl-bgp-topology-types"/&gt;&lt;/topology-types&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-04-18T03:05:53.252881" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${PC_NW_TOPOLOGY}=${topology}?content=nonconfig</arg>
<arg>expected_status=anything</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-18T03:05:53.243435" elapsed="0.009487"/>
</kw>
<if>
<branch type="IF" condition="${response.status_code} != 200">
<kw name="Fail" owner="BuiltIn">
<arg>Get on ${topology} returned status code ${response.status_code} with message: ${response.text}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.256473" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:53.253037" elapsed="0.003542"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.253009" elapsed="0.003606"/>
</if>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-18T03:05:53.256667" elapsed="0.000044"/>
</return>
<msg time="2026-04-18T03:05:53.259924" level="INFO">${topology} = &lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xml...</msg>
<var>${topology}</var>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>GET the example-ipv4-topology data, check status is 200, return the topology data.</doc>
<status status="PASS" start="2026-04-18T03:05:53.242998" elapsed="0.016972"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.260831" level="INFO">${prefix_count} = 0</msg>
<var>${prefix_count}</var>
<arg>len(re.findall('"prefix":"', '''${topology}'''))</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:53.260210" elapsed="0.000666"/>
</kw>
<return>
<value>${prefix_count}</value>
<status status="PASS" start="2026-04-18T03:05:53.261009" elapsed="0.000044"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Get topology. If not fail, return number of prefixes in the topology.</doc>
<status status="PASS" start="2026-04-18T03:05:53.242351" elapsed="0.018845"/>
</kw>
<msg time="2026-04-18T03:05:53.261329" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:05:53.261392" level="INFO">${message} = 0</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:53.241857" elapsed="0.019568"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:53.261683" elapsed="0.027878"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:05:53.290647" elapsed="0.000037"/>
</return>
<status status="PASS" start="2026-04-18T03:05:53.290482" elapsed="0.000236"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.290456" elapsed="0.000288"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.290911" elapsed="0.000022"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with 0.</doc>
<status status="PASS" start="2026-04-18T03:05:53.290045" elapsed="0.000950"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:05:53.291040" elapsed="0.000027"/>
</return>
<msg time="2026-04-18T03:05:53.291200" level="INFO">${actual_count} = 0</msg>
<var>${actual_count}</var>
<arg>Get_Ipv4_Topology_Count</arg>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:05:53.241322" elapsed="0.049905"/>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.291763" level="INFO">Argument types are:
&lt;class 'int'&gt;
&lt;class 'str'&gt;</msg>
<arg>${actual_count}</arg>
<arg>${expected_count}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="PASS" start="2026-04-18T03:05:53.291392" elapsed="0.000435"/>
</kw>
<arg>0</arg>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>Check that the count of prefixes matches the expected count. Fails if it does not. In either case, collect garbage.</doc>
<status status="PASS" start="2026-04-18T03:05:53.240786" elapsed="0.051101"/>
</kw>
<doc>Example_Ipv4_Topology has to give status 200 with zero prefixes.</doc>
<status status="PASS" start="2026-04-18T03:05:53.240405" elapsed="0.051539"/>
</kw>
<arg>120s</arg>
<arg>1s</arg>
<arg>PrefixCounting.Check_Ipv4_Topology_Is_Empty</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-04-18T03:05:53.239875" elapsed="0.052112"/>
</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">
<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-04-18T03:05:53.292614" elapsed="0.000250"/>
</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-04-18T03:05:53.293726" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:53.293312" elapsed="0.000479"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.293294" elapsed="0.000564"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>'${SetupUtils__Known_Bug_ID}' != ''</arg>
<arg>Set_Known_Bug_Id</arg>
<arg>${EMPTY}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:53.294013" elapsed="0.000318"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.299355" level="INFO">${test_skipped} = False</msg>
<var>${test_skipped}</var>
<arg>len(re.findall('SKIPPED', """${TEST_MESSAGE}""")) &gt; 0</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:53.298932" elapsed="0.000452"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-04-18T03:05:53.299639" elapsed="0.000029"/>
</return>
<status status="PASS" start="2026-04-18T03:05:53.299460" elapsed="0.000240"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.299440" elapsed="0.000284"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.299875" elapsed="0.000021"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<var>${reference}</var>
<arg>${SUITE_NAME}_${TEST_NAME}</arg>
<arg>[ /\.-]</arg>
<arg>_</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.300054" elapsed="0.000020"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.300229" elapsed="0.000020"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${msg}</var>
<arg>... click for list of related bugs or create a new one if needed (with the${newline}"${reference}"${newline}reference somewhere inside)</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.300399" elapsed="0.000020"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${bugs}</var>
<arg>"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=${reference}&amp;order=bug_status"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.300599" 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-04-18T03:05:53.300773" elapsed="0.000020"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.300941" elapsed="0.000020"/>
</kw>
<doc>Report that a test failed and point to linked Bugzilla bug(s).
Linked bugs must contain the ${reference} inside comments (workaround
becasue of currently missing suitable field for external references and
not correctly working the CONTENT MATCHES filter).
Not FAILED (incl. SKIPPED) test are not reported.
This keyword must be used in the [Teardown] setting of the affected test
or as the first line of the test if FastFail module is not being
used. It reports the URL of the bug on console and also puts it
into the Robot log file.</doc>
<status status="PASS" start="2026-04-18T03:05:53.298616" elapsed="0.002401"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:53.293097" elapsed="0.008047"/>
</kw>
<doc>Test case teardown. Show linked bugs and start fast failing in case of failure.</doc>
<status status="PASS" start="2026-04-18T03:05:53.292272" elapsed="0.008915"/>
</kw>
<doc>Wait for example-ipv4-topology to come up and empty. Give large timeout for case when BGP boots slower than restconf.</doc>
<tag>critical</tag>
<status status="PASS" start="2026-04-18T03:05:53.118543" elapsed="0.182681"/>
</test>
<test id="s1-s2-t2" name="Reconfigure_ODL_To_Accept_Connection" line="85">
<kw name="Setup_Test_With_Logging_And_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Fail_This_Fast_On_Previous_Error" owner="FailFast">
<if>
<branch type="IF" condition="'''${SuiteFastFail}'''=='True'">
<kw name="Fail" owner="BuiltIn">
<arg>SKIPPED due to a failure in a previous fundamental test case.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.304966" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:53.304741" elapsed="0.000286"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.304722" elapsed="0.000328"/>
</if>
<doc>Mark (immediately) this test case as failed when fast-fail is enabled in suite.</doc>
<status status="PASS" start="2026-04-18T03:05:53.304539" 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-04-18T03:05:53.306148" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:53.306040" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.306021" 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-04-18T03:05:53.311095" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:53.310984" elapsed="0.000160"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.310963" elapsed="0.000203"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.312200" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-18T03:05:53.311809" elapsed="0.000418"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.312716" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-18T03:05:53.312392" elapsed="0.000353"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-18T03:05:53.312802" elapsed="0.000033"/>
</return>
<msg time="2026-04-18T03:05:53.312966" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-18T03:05:53.311398" elapsed="0.001593"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:53.318740" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:53.318629" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.318609" elapsed="0.000201"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:53.320095" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:53.319986" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.319964" elapsed="0.000199"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-18T03:05:53.320645" level="INFO">${karaf_connection_index} = 4</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-18T03:05:53.320312" elapsed="0.000360"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-18T03:05:53.321071" level="INFO">${current_connection_index} = 7</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:05:53.320835" elapsed="0.000262"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-18T03:05:53.360861" 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 "b "g "p "c "e "p "- "b "g "p "- "i "n "g "e "s "t "[78C- "[A[78Cm</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-18T03:05:53.321621" elapsed="0.039584"/>
</kw>
<msg time="2026-04-18T03:05:53.361412" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-18T03:05:53.361471" 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 "b "g "p "c "e "p "- "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:53.321261" elapsed="0.040252"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-18T03:05:53.399975" level="INFO">"i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "R "e "c "o "n "f "i "g "u "r "e "_ "O "D "L "_ "T "o "_ "A "c "c "e "p "t "_ "C "o "n "n "e "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-04-18T03:05:53.362224" elapsed="0.037915"/>
</kw>
<msg time="2026-04-18T03:05:53.400367" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-18T03:05:53.400427" level="INFO">${message_wait} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "R "e "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-04-18T03:05:53.361781" elapsed="0.038686"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.400870" elapsed="0.000108"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:53.400593" elapsed="0.000442"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.400562" elapsed="0.000515"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.401638" level="INFO"> "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "R "e "c "o "n "f "i "g "u "r "e "_ "O "D "L "_ "T "o "_ "A "c "c "e "p "t "_ "C "o "n "n "e "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-04-18T03:05:53.401251" 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-04-18T03:05:53.402070" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:53.401815" elapsed="0.000311"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.401793" elapsed="0.000357"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-18T03:05:53.402187" elapsed="0.000038"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:05:53.405074" elapsed="0.000153"/>
</kw>
<msg time="2026-04-18T03:05:53.405291" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:53.403885" elapsed="0.001546"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.405765" elapsed="0.000086"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.406169" elapsed="0.000118"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-18T03:05:53.403174" elapsed="0.003240"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-18T03:05:53.402510" elapsed="0.003972"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-18T03:05:53.319667" elapsed="0.086934"/>
</kw>
<msg time="2026-04-18T03:05:53.406736" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:05:53.406791" level="INFO">${message} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "R "e "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-04-18T03:05:53.318991" elapsed="0.087840"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:05:53.407030" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-18T03:05:53.406913" elapsed="0.000180"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.406893" elapsed="0.000224"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.407569" elapsed="0.000026"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.407927" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:05:53.408000" elapsed="0.000017"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-18T03:05:53.318253" elapsed="0.089859"/>
</kw>
<msg time="2026-04-18T03:05:53.408207" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:05:53.408251" level="INFO">${output} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "R "e "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-04-18T03:05:53.313372" elapsed="0.094918"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.408654" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:53.408366" elapsed="0.000346"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.408348" elapsed="0.000391"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-18T03:05:53.313223" elapsed="0.095550"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-18T03:05:53.313047" elapsed="0.095762"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-18T03:05:53.310602" elapsed="0.098265"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-18T03:05:53.305716" elapsed="0.103208"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:53.305253" elapsed="0.103717"/>
</kw>
<doc>Test case setup which skips on previous failure. If not, logs test case name to Karaf log.
Recommended to be used as the default test case setup.</doc>
<status status="PASS" start="2026-04-18T03:05:53.302136" elapsed="0.106888"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.410404" level="INFO">&amp;{mapping} = { DEVICE_NAME=controller-config | BGP_NAME=example-bgp-peer | IP=10.30.170.251 | HOLDTIME=180 | PEER_PORT=17900 | INITIATE=false | BGP_RIB=example-bgp-rib | PASSIVE_MODE=true | BGP_RIB_OPENCONFIG=exam...</msg>
<var>&amp;{mapping}</var>
<arg>DEVICE_NAME=${DEVICE_NAME}</arg>
<arg>BGP_NAME=${BGP_PEER_NAME}</arg>
<arg>IP=${TOOLS_SYSTEM_IP}</arg>
<arg>HOLDTIME=${HOLDTIME_PREFIX_COUNT_SINGLE}</arg>
<arg>PEER_PORT=${BGP_TOOL_PORT}</arg>
<arg>INITIATE=false</arg>
<arg>BGP_RIB=${RIB_INSTANCE}</arg>
<arg>PASSIVE_MODE=true</arg>
<arg>BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}</arg>
<arg>RIB_INSTANCE_NAME=${RIB_INSTANCE}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-18T03:05:53.409260" elapsed="0.001184"/>
</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-04-18T03:05:53.448156" level="INFO">${file_path_stream} = /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:05:53.447656" elapsed="0.000541"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-18T03:05:53.449160" level="FAIL">File '/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/variables/bgpuser/bgp_peer.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-18T03:05:53.448888" elapsed="0.000352">File '/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/variables/bgpuser/bgp_peer.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-18T03:05:53.449340" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-18T03:05:53.448438" elapsed="0.000927"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.450039" level="INFO">${file_path} = /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-18T03:05:53.449574" elapsed="0.000494"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-18T03:05:53.450384" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/variables/bgpuser/bgp_peer/location.uri"&gt;/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/variables/bgpuser/bgp_peer/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-18T03:05:53.450570" level="INFO">${template} = rests/data/openconfig-network-instance:network-instances/network-instance=global-bgp/openconfig-network-instance:protocols/protocol=openconfig-policy-types%3ABGP,$BGP_RIB_OPENCONFIG/bgp-openconfig-ext...</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-18T03:05:53.450237" elapsed="0.000361"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.451061" level="INFO">rests/data/openconfig-network-instance:network-instances/network-instance=global-bgp/openconfig-network-instance:protocols/protocol=openconfig-policy-types%3ABGP,$BGP_RIB_OPENCONFIG/bgp-openconfig-extensions:bgp/neighbors/neighbor=$IP
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:53.450778" elapsed="0.000333"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.452161" level="INFO">mapping: {'DEVICE_NAME': 'controller-config', 'BGP_NAME': 'example-bgp-peer', 'IP': '10.30.170.251', 'HOLDTIME': '180', 'PEER_PORT': '17900', 'INITIATE': 'false', 'BGP_RIB': 'example-bgp-rib', 'PASSIVE_MODE': 'true', 'BGP_RIB_OPENCONFIG': 'example-bgp-rib', 'RIB_INSTANCE_NAME': 'example-bgp-rib'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:53.451863" elapsed="0.000347"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.452671" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-18T03:05:53.452378" elapsed="0.000320"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.453445" level="INFO">${value} = controller-config</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-18T03:05:53.453137" elapsed="0.000335"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-18T03:05:53.454325" level="INFO">${encoded} = controller-config</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-18T03:05:53.454075" elapsed="0.000288"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-18T03:05:53.454418" elapsed="0.000033"/>
</return>
<msg time="2026-04-18T03:05:53.454600" level="INFO">${encoded_value} = controller-config</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-04-18T03:05:53.453696" elapsed="0.000931"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-18T03:05:53.454809" elapsed="0.000263"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">controller-config</var>
<status status="PASS" start="2026-04-18T03:05:53.452990" elapsed="0.002125"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.455726" level="INFO">${value} = example-bgp-peer</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-18T03:05:53.455391" elapsed="0.000368"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-18T03:05:53.456502" level="INFO">${encoded} = example-bgp-peer</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-18T03:05:53.456286" elapsed="0.000259"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-18T03:05:53.456598" elapsed="0.000030"/>
</return>
<msg time="2026-04-18T03:05:53.456835" level="INFO">${encoded_value} = example-bgp-peer</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-04-18T03:05:53.455961" elapsed="0.000907"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-18T03:05:53.457036" elapsed="0.000267"/>
</kw>
<var name="${key}">BGP_NAME</var>
<var name="${value}">example-bgp-peer</var>
<status status="PASS" start="2026-04-18T03:05:53.455232" elapsed="0.002123"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.458255" level="INFO">${value} = 10.30.170.251</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-18T03:05:53.457647" elapsed="0.000636"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-18T03:05:53.459115" level="INFO">${encoded} = 10.30.170.251</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-18T03:05:53.458875" elapsed="0.000268"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-18T03:05:53.459196" elapsed="0.000030"/>
</return>
<msg time="2026-04-18T03:05:53.459364" level="INFO">${encoded_value} = 10.30.170.251</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-04-18T03:05:53.458520" 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-04-18T03:05:53.459586" elapsed="0.000249"/>
</kw>
<var name="${key}">IP</var>
<var name="${value}">10.30.170.251</var>
<status status="PASS" start="2026-04-18T03:05:53.457477" elapsed="0.002402"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.460437" level="INFO">${value} = 180</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-18T03:05:53.460133" elapsed="0.000329"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-18T03:05:53.461267" level="INFO">${encoded} = 180</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-18T03:05:53.461012" elapsed="0.000285"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-18T03:05:53.461363" elapsed="0.000036"/>
</return>
<msg time="2026-04-18T03:05:53.461572" level="INFO">${encoded_value} = 180</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-04-18T03:05:53.460671" elapsed="0.000932"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-18T03:05:53.461807" elapsed="0.000295"/>
</kw>
<var name="${key}">HOLDTIME</var>
<var name="${value}">180</var>
<status status="PASS" start="2026-04-18T03:05:53.459995" elapsed="0.002162"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.462773" level="INFO">${value} = 17900</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-18T03:05:53.462416" elapsed="0.000384"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-18T03:05:53.463603" level="INFO">${encoded} = 17900</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-18T03:05:53.463369" elapsed="0.000260"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-18T03:05:53.463682" elapsed="0.000029"/>
</return>
<msg time="2026-04-18T03:05:53.463847" level="INFO">${encoded_value} = 17900</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-04-18T03:05:53.463038" elapsed="0.000835"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-18T03:05:53.464054" elapsed="0.000235"/>
</kw>
<var name="${key}">PEER_PORT</var>
<var name="${value}">17900</var>
<status status="PASS" start="2026-04-18T03:05:53.462276" elapsed="0.002055"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.464942" level="INFO">${value} = false</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-18T03:05:53.464602" elapsed="0.000366"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-18T03:05:53.465756" level="INFO">${encoded} = false</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-18T03:05:53.465503" elapsed="0.000283"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-18T03:05:53.465839" elapsed="0.000029"/>
</return>
<msg time="2026-04-18T03:05:53.466035" level="INFO">${encoded_value} = false</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-04-18T03:05:53.465162" elapsed="0.000898"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-18T03:05:53.466215" elapsed="0.000225"/>
</kw>
<var name="${key}">INITIATE</var>
<var name="${value}">false</var>
<status status="PASS" start="2026-04-18T03:05:53.464447" elapsed="0.002033"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.467066" level="INFO">${value} = example-bgp-rib</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-18T03:05:53.466757" elapsed="0.000335"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-18T03:05:53.467911" level="INFO">${encoded} = example-bgp-rib</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-18T03:05:53.467660" elapsed="0.000278"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-18T03:05:53.467992" elapsed="0.000031"/>
</return>
<msg time="2026-04-18T03:05:53.468147" level="INFO">${encoded_value} = example-bgp-rib</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-04-18T03:05:53.467290" elapsed="0.000919"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-18T03:05:53.468519" elapsed="0.000258"/>
</kw>
<var name="${key}">BGP_RIB</var>
<var name="${value}">example-bgp-rib</var>
<status status="PASS" start="2026-04-18T03:05:53.466613" elapsed="0.002211"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.469402" level="INFO">${value} = true</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-18T03:05:53.469082" elapsed="0.000347"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-18T03:05:53.470410" level="INFO">${encoded} = true</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-18T03:05:53.470190" elapsed="0.000247"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-18T03:05:53.470488" elapsed="0.000030"/>
</return>
<msg time="2026-04-18T03:05:53.470676" level="INFO">${encoded_value} = true</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-04-18T03:05:53.469646" elapsed="0.001056"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-18T03:05:53.470866" elapsed="0.000256"/>
</kw>
<var name="${key}">PASSIVE_MODE</var>
<var name="${value}">true</var>
<status status="PASS" start="2026-04-18T03:05:53.468942" elapsed="0.002233"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.471781" level="INFO">${value} = example-bgp-rib</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-18T03:05:53.471442" elapsed="0.000366"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-18T03:05:53.472658" level="INFO">${encoded} = example-bgp-rib</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-18T03:05:53.472414" elapsed="0.000271"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-18T03:05:53.472738" elapsed="0.000035"/>
</return>
<msg time="2026-04-18T03:05:53.472903" level="INFO">${encoded_value} = example-bgp-rib</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-04-18T03:05:53.472032" elapsed="0.000895"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-18T03:05:53.473082" elapsed="0.000243"/>
</kw>
<var name="${key}">BGP_RIB_OPENCONFIG</var>
<var name="${value}">example-bgp-rib</var>
<status status="PASS" start="2026-04-18T03:05:53.471301" elapsed="0.002066"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.474031" level="INFO">${value} = example-bgp-rib</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-18T03:05:53.473651" elapsed="0.000407"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-18T03:05:53.474811" level="INFO">${encoded} = example-bgp-rib</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-18T03:05:53.474595" elapsed="0.000241"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-18T03:05:53.474884" elapsed="0.000029"/>
</return>
<msg time="2026-04-18T03:05:53.475037" level="INFO">${encoded_value} = example-bgp-rib</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-04-18T03:05:53.474254" 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-04-18T03:05:53.475214" elapsed="0.000247"/>
</kw>
<var name="${key}">RIB_INSTANCE_NAME</var>
<var name="${value}">example-bgp-rib</var>
<status status="PASS" start="2026-04-18T03:05:53.473482" elapsed="0.002022"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-18T03:05:53.452756" elapsed="0.022813"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-18T03:05:53.475616" elapsed="0.000028"/>
</return>
<msg time="2026-04-18T03:05:53.475801" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'controller-config', 'BGP_NAME': 'example-bgp-peer', 'IP': '10.30.170.251', 'HOLDTIME': '180', 'PEER_PORT': '17900', 'INITIATE': 'false', 'BGP_RIB': 'example-bgp-rib', 'PASSIVE_MODE': ...</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-18T03:05:53.451496" elapsed="0.024333"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:53.451183" elapsed="0.024680"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.476075" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:53.475889" elapsed="0.000246"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.451163" elapsed="0.024993"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.477310" level="INFO">${final_text} = rests/data/openconfig-network-instance:network-instances/network-instance=global-bgp/openconfig-network-instance:protocols/protocol=openconfig-policy-types%3ABGP,example-bgp-rib/bgp-openconfig-extensi...</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:53.476305" elapsed="0.001041"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-18T03:05:53.477407" elapsed="0.000036"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer/${file_name}.</doc>
<status status="PASS" start="2026-04-18T03:05:53.446827" elapsed="0.030755"/>
</kw>
<msg time="2026-04-18T03:05:53.477704" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:53.433325" elapsed="0.044452"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.490961" 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/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.504301" 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/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.517469" elapsed="0.000030"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.517705" elapsed="0.000024"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.517897" elapsed="0.000024"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.518310" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:53.518158" elapsed="0.000209"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:05:53.518141" elapsed="0.000250"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.518554" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.518731" elapsed="0.000026"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.518916" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-18T03:05:53.518112" elapsed="0.000857"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-18T03:05:53.518003" elapsed="0.000992"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.519157" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-18T03:05:53.519234" elapsed="0.000015"/>
</return>
<msg time="2026-04-18T03:05:53.519362" level="INFO">${uri} = rests/data/openconfig-network-instance:network-instances/network-instance=global-bgp/openconfig-network-instance:protocols/protocol=openconfig-policy-types%3ABGP,example-bgp-rib/bgp-openconfig-extensi...</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from 1, by one  times.
Template variable ${j} is calculated as ${i} incremented by offset 0 ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-04-18T03:05:53.428506" elapsed="0.090883"/>
</kw>
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.547425" level="INFO">${file_path_stream} = /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.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-04-18T03:05:53.547037" elapsed="0.000416"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-18T03:05:53.548238" level="FAIL">File '/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/variables/bgpuser/bgp_peer.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-04-18T03:05:53.548007" elapsed="0.000305">File '/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/variables/bgpuser/bgp_peer.vanadium/data.xml' does not exist.</status>
</kw>
<msg time="2026-04-18T03:05:53.548461" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-18T03:05:53.547637" elapsed="0.000849"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.549114" level="INFO">${file_path} = /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer/data.xml</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-18T03:05:53.548672" elapsed="0.000480"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-18T03:05:53.549486" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/variables/bgpuser/bgp_peer/data.xml"&gt;/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/variables/bgpuser/bgp_peer/data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-18T03:05:53.549650" level="INFO">${template} = &lt;neighbor xmlns="urn:opendaylight:params:xml:ns:yang:bgp:openconfig-extensions"&gt;
    &lt;neighbor-address&gt;$IP&lt;/neighbor-address&gt;
    &lt;route-reflector&gt;
        &lt;config&gt;
            &lt;route-reflector-client...</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-18T03:05:53.549333" elapsed="0.000347"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.550131" level="INFO">&lt;neighbor xmlns="urn:opendaylight:params:xml:ns:yang:bgp:openconfig-extensions"&gt;
    &lt;neighbor-address&gt;$IP&lt;/neighbor-address&gt;
    &lt;route-reflector&gt;
        &lt;config&gt;
            &lt;route-reflector-client&gt;false&lt;/route-reflector-client&gt;
        &lt;/config&gt;
    &lt;/route-reflector&gt;
    &lt;timers&gt;
        &lt;config&gt;
            &lt;hold-time&gt;$HOLDTIME&lt;/hold-time&gt;
            &lt;connect-retry&gt;5&lt;/connect-retry&gt;
        &lt;/config&gt;
    &lt;/timers&gt;
    &lt;transport&gt;
        &lt;config&gt;
            &lt;remote-port&gt;$PEER_PORT&lt;/remote-port&gt;
            &lt;passive-mode&gt;$PASSIVE_MODE&lt;/passive-mode&gt;
        &lt;/config&gt;
    &lt;/transport&gt;
    &lt;config&gt;
        &lt;peer-type&gt;INTERNAL&lt;/peer-type&gt;
    &lt;/config&gt;
    &lt;afi-safis&gt;
        &lt;afi-safi&gt;
            &lt;afi-safi-name xmlns:x="http://openconfig.net/yang/bgp-types"&gt;x:IPV4-UNICAST&lt;/afi-safi-name&gt;
        &lt;/afi-safi&gt;
        &lt;afi-safi&gt;
            &lt;afi-safi-name xmlns:x="http://openconfig.net/yang/bgp-types"&gt;x:IPV6-UNICAST&lt;/afi-safi-name&gt;
        &lt;/afi-safi&gt;
        &lt;afi-safi&gt;
            &lt;afi-safi-name&gt;LINKSTATE&lt;/afi-safi-name&gt;
        &lt;/afi-safi&gt;
    &lt;/afi-safis&gt;
&lt;/neighbor&gt;
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:53.549849" elapsed="0.000344"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="NOT RUN" start="2026-04-18T03:05:53.550584" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:53.550263" elapsed="0.000380"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.551162" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'controller-config', 'BGP_NAME': 'example-bgp-peer', 'IP': '10.30.170.251', 'HOLDTIME': '180', 'PEER_PORT': '17900', 'INITIATE': 'false', 'BGP_RIB': 'example-bgp-rib', 'PASSIVE_MODE': ...</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:05:53.550831" elapsed="0.000361"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:53.550669" elapsed="0.000560"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.550243" elapsed="0.001008"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.552235" level="INFO">${final_text} = &lt;neighbor xmlns="urn:opendaylight:params:xml:ns:yang:bgp:openconfig-extensions"&gt;
    &lt;neighbor-address&gt;10.30.170.251&lt;/neighbor-address&gt;
    &lt;route-reflector&gt;
        &lt;config&gt;
            &lt;route-reflec...</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:53.551401" elapsed="0.000866"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-18T03:05:53.552318" 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/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer/${file_name}.</doc>
<status status="PASS" start="2026-04-18T03:05:53.546367" elapsed="0.006080"/>
</kw>
<msg time="2026-04-18T03:05:53.552507" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:53.533286" elapsed="0.019298"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.565678" 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/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.579004" elapsed="0.000033"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.592440" elapsed="0.000032"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.592685" elapsed="0.000025"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.592871" elapsed="0.000020"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.593333" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:53.593144" elapsed="0.000248"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:05:53.593127" elapsed="0.000295"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.593633" elapsed="0.000026"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.593850" elapsed="0.000021"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.594086" elapsed="0.000027"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-18T03:05:53.593091" elapsed="0.001058"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-18T03:05:53.592962" elapsed="0.001224"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.594465" elapsed="0.000023"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-18T03:05:53.594570" elapsed="0.000020"/>
</return>
<msg time="2026-04-18T03:05:53.594741" level="INFO">${data} = &lt;neighbor xmlns="urn:opendaylight:params:xml:ns:yang:bgp:openconfig-extensions"&gt;
    &lt;neighbor-address&gt;10.30.170.251&lt;/neighbor-address&gt;
    &lt;route-reflector&gt;
        &lt;config&gt;
            &lt;route-reflec...</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-04-18T03:05:53.530591" elapsed="0.064184"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-18T03:05:53.596334" level="FAIL">File '/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/variables/bgpuser/bgp_peer/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-18T03:05:53.596029" elapsed="0.000393">File '/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/variables/bgpuser/bgp_peer/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-18T03:05:53.596552" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-18T03:05:53.595564" elapsed="0.001021"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.596994" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:53.596672" elapsed="0.000392"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.597697" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:05:53.597316" elapsed="0.000414"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:53.597094" elapsed="0.000678"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.596650" elapsed="0.001149"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.600458" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-18T03:05:53.597998" elapsed="0.002494"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-18T03:05:53.600567" elapsed="0.000034"/>
</return>
<msg time="2026-04-18T03:05:53.600738" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-18T03:05:53.595132" elapsed="0.005638"/>
</kw>
<kw name="Put_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.602504" level="INFO">rests/data/openconfig-network-instance:network-instances/network-instance=global-bgp/openconfig-network-instance:protocols/protocol=openconfig-policy-types%3ABGP,example-bgp-rib/bgp-openconfig-extensions:bgp/neighbors/neighbor=10.30.170.251</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:53.602196" elapsed="0.000430"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.603130" level="INFO">&lt;neighbor xmlns="urn:opendaylight:params:xml:ns:yang:bgp:openconfig-extensions"&gt;
    &lt;neighbor-address&gt;10.30.170.251&lt;/neighbor-address&gt;
    &lt;route-reflector&gt;
        &lt;config&gt;
            &lt;route-reflector-client&gt;false&lt;/route-reflector-client&gt;
        &lt;/config&gt;
    &lt;/route-reflector&gt;
    &lt;timers&gt;
        &lt;config&gt;
            &lt;hold-time&gt;180&lt;/hold-time&gt;
            &lt;connect-retry&gt;5&lt;/connect-retry&gt;
        &lt;/config&gt;
    &lt;/timers&gt;
    &lt;transport&gt;
        &lt;config&gt;
            &lt;remote-port&gt;17900&lt;/remote-port&gt;
            &lt;passive-mode&gt;true&lt;/passive-mode&gt;
        &lt;/config&gt;
    &lt;/transport&gt;
    &lt;config&gt;
        &lt;peer-type&gt;INTERNAL&lt;/peer-type&gt;
    &lt;/config&gt;
    &lt;afi-safis&gt;
        &lt;afi-safi&gt;
            &lt;afi-safi-name xmlns:x="http://openconfig.net/yang/bgp-types"&gt;x:IPV4-UNICAST&lt;/afi-safi-name&gt;
        &lt;/afi-safi&gt;
        &lt;afi-safi&gt;
            &lt;afi-safi-name xmlns:x="http://openconfig.net/yang/bgp-types"&gt;x:IPV6-UNICAST&lt;/afi-safi-name&gt;
        &lt;/afi-safi&gt;
        &lt;afi-safi&gt;
            &lt;afi-safi-name&gt;LINKSTATE&lt;/afi-safi-name&gt;
        &lt;/afi-safi&gt;
    &lt;/afi-safis&gt;
&lt;/neighbor&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:53.602830" elapsed="0.000376"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.603732" level="INFO">{'Content-Type': 'application/xml'}</msg>
<arg>${content_type}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:53.603406" elapsed="0.000382"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.604289" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:53.603988" elapsed="0.000357"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-18T03:05:53.605380" level="INFO">${accumulator} = {'Content-Type': 'application/xml'}</msg>
<var>${accumulator}</var>
<arg>${first}</arg>
<doc>Returns a copy of the given dictionary.</doc>
<status status="PASS" start="2026-04-18T03:05:53.605139" elapsed="0.000274"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-18T03:05:53.605851" level="INFO">${items_to_add} = ['Accept', 'application/xml']</msg>
<var>${items_to_add}</var>
<arg>${second}</arg>
<doc>Returns items of the given ``dictionary`` as a list.</doc>
<status status="PASS" start="2026-04-18T03:05:53.605629" elapsed="0.000254"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${accumulator}</arg>
<arg>@{items_to_add}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-18T03:05:53.606111" elapsed="0.000259"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.606899" level="INFO">{'Content-Type': 'application/xml', 'Accept': 'application/xml'}</msg>
<arg>${accumulator}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:53.606595" elapsed="0.000360"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-18T03:05:53.607007" elapsed="0.000035"/>
</return>
<msg time="2026-04-18T03:05:53.607194" level="INFO">${headers} = {'Content-Type': 'application/xml', 'Accept': 'application/xml'}</msg>
<var>${headers}</var>
<arg>first=${content_type}</arg>
<arg>second=${accept}</arg>
<doc>Take two dicts, join them, return result. Second argument values take precedence.</doc>
<status status="PASS" start="2026-04-18T03:05:53.604626" elapsed="0.002600"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="PUT On Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:05:53.631516" level="INFO">PUT Request : url=http://10.30.170.68:8181/rests/data/openconfig-network-instance:network-instances/network-instance=global-bgp/openconfig-network-instance:protocols/protocol=openconfig-policy-types%3ABGP,example-bgp-rib/bgp-openconfig-extensions:bgp/neighbors/neighbor=10.30.170.251 
 path_url=/rests/data/openconfig-network-instance:network-instances/network-instance=global-bgp/openconfig-network-instance:protocols/protocol=openconfig-policy-types%3ABGP,example-bgp-rib/bgp-openconfig-extensions:bgp/neighbors/neighbor=10.30.170.251 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Content-Length': '1079', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;neighbor xmlns="urn:opendaylight:params:xml:ns:yang:bgp:openconfig-extensions"&gt;
    &lt;neighbor-address&gt;10.30.170.251&lt;/neighbor-address&gt;
    &lt;route-reflector&gt;
        &lt;config&gt;
            &lt;route-reflector-client&gt;false&lt;/route-reflector-client&gt;
        &lt;/config&gt;
    &lt;/route-reflector&gt;
    &lt;timers&gt;
        &lt;config&gt;
            &lt;hold-time&gt;180&lt;/hold-time&gt;
            &lt;connect-retry&gt;5&lt;/connect-retry&gt;
        &lt;/config&gt;
    &lt;/timers&gt;
    &lt;transport&gt;
        &lt;config&gt;
            &lt;remote-port&gt;17900&lt;/remote-port&gt;
            &lt;passive-mode&gt;true&lt;/passive-mode&gt;
        &lt;/config&gt;
    &lt;/transport&gt;
    &lt;config&gt;
        &lt;peer-type&gt;INTERNAL&lt;/peer-type&gt;
    &lt;/config&gt;
    &lt;afi-safis&gt;
        &lt;afi-safi&gt;
            &lt;afi-safi-name xmlns:x="http://openconfig.net/yang/bgp-types"&gt;x:IPV4-UNICAST&lt;/afi-safi-name&gt;
        &lt;/afi-safi&gt;
        &lt;afi-safi&gt;
            &lt;afi-safi-name xmlns:x="http://openconfig.net/yang/bgp-types"&gt;x:IPV6-UNICAST&lt;/afi-safi-name&gt;
        &lt;/afi-safi&gt;
        &lt;afi-safi&gt;
            &lt;afi-safi-name&gt;LINKSTATE&lt;/afi-safi-name&gt;
        &lt;/afi-safi&gt;
    &lt;/afi-safis&gt;
&lt;/neighbor&gt; 
 </msg>
<msg time="2026-04-18T03:05:53.631704" level="INFO">PUT Response : url=http://10.30.170.68:8181/rests/data/openconfig-network-instance:network-instances/network-instance=global-bgp/openconfig-network-instance:protocols/protocol=openconfig-policy-types%3ABGP,example-bgp-rib/bgp-openconfig-extensions:bgp/neighbors/neighbor=10.30.170.251 
 status=201, reason=Created 
 headers={'Set-Cookie': 'JSESSIONID=node01nuoo0mlt5ido1wctlq8u208h83.node0; Path=/rests; HttpOnly, rememberMe=deleteMe; Path=/rests; Max-Age=0; Expires=Fri, 17-Apr-2026 03:05:53 GMT; SameSite=lax', 'Expires': 'Thu, 01 Jan 1970 00:00:00 GMT', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-04-18T03:05:53.631945" level="INFO">${response} = &lt;Response [201]&gt;</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="PASS" start="2026-04-18T03:05:53.610415" elapsed="0.021591"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:53.607313" elapsed="0.024797"/>
</branch>
<branch type="ELSE">
<kw name="PUT On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a PUT request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.632553" elapsed="0.000052"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:53.632171" elapsed="0.000536"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.607291" elapsed="0.025465"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.638277" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:53.635071" elapsed="0.003269"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:53.634621" elapsed="0.003768"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.634576" elapsed="0.003847"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.642011" level="INFO">201</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:53.638834" elapsed="0.003267"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:53.638501" elapsed="0.003649"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.638477" elapsed="0.003707"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.642991" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:53.642417" elapsed="0.000613"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.643463" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:53.643129" elapsed="0.000437"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.644361" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:05:53.643831" elapsed="0.000577"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:53.643602" elapsed="0.000868"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.643102" elapsed="0.001404"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.645444" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:53.644821" elapsed="0.000663"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.645974" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:53.645607" elapsed="0.000495"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.646815" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:05:53.646368" elapsed="0.000484"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:53.646138" elapsed="0.000763"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.645580" elapsed="0.001351"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:53.647103" elapsed="0.000351"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-18T03:05:53.647945" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:53.647638" elapsed="0.000333"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-18T03:05:53.648129" elapsed="0.002352"/>
</kw>
<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="PASS" start="2026-04-18T03:05:53.633707" elapsed="0.016856"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-18T03:05:53.650743" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-04-18T03:05:53.650633" elapsed="0.000179"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.650613" elapsed="0.000224"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.650989" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-18T03:05:53.651056" elapsed="0.000015"/>
</return>
<msg time="2026-04-18T03:05:53.653297" level="INFO">${response_text} = </msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>content_type=${content_type}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>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="PASS" start="2026-04-18T03:05:53.601194" elapsed="0.052131"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-18T03:05:53.653391" elapsed="0.000028"/>
</return>
<msg time="2026-04-18T03:05:53.653567" level="INFO">${response_text} = </msg>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>extension=xml</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>content_type=${HEADERS_XML}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>endline=${\n}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>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="PASS" start="2026-04-18T03:05:53.415582" elapsed="0.238012"/>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=response</arg>
<arg>mapping=${mapping}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.653959" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:53.653698" elapsed="0.000333"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.653680" elapsed="0.000467"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-18T03:05:53.654188" elapsed="0.000027"/>
</return>
<arg>${BGP_VARIABLES_FOLDER}${/}bgp_peer</arg>
<arg>mapping=${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="PASS" start="2026-04-18T03:05:53.410837" elapsed="0.243479"/>
</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">
<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-04-18T03:05:53.654947" elapsed="0.000246"/>
</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-04-18T03:05:53.656041" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:53.655651" elapsed="0.000452"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.655633" elapsed="0.000496"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>'${SetupUtils__Known_Bug_ID}' != ''</arg>
<arg>Set_Known_Bug_Id</arg>
<arg>${EMPTY}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:53.656278" elapsed="0.000329"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.661872" level="INFO">${test_skipped} = False</msg>
<var>${test_skipped}</var>
<arg>len(re.findall('SKIPPED', """${TEST_MESSAGE}""")) &gt; 0</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:53.661366" elapsed="0.000535"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-04-18T03:05:53.662173" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-18T03:05:53.661977" elapsed="0.000253"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.661958" elapsed="0.000297"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.662406" elapsed="0.000021"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<var>${reference}</var>
<arg>${SUITE_NAME}_${TEST_NAME}</arg>
<arg>[ /\.-]</arg>
<arg>_</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.662597" elapsed="0.000022"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.662773" elapsed="0.000020"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${msg}</var>
<arg>... click for list of related bugs or create a new one if needed (with the${newline}"${reference}"${newline}reference somewhere inside)</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.662939" elapsed="0.000020"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${bugs}</var>
<arg>"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=${reference}&amp;order=bug_status"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.663106" elapsed="0.000019"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.663271" elapsed="0.000020"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.663435" elapsed="0.000020"/>
</kw>
<doc>Report that a test failed and point to linked Bugzilla bug(s).
Linked bugs must contain the ${reference} inside comments (workaround
becasue of currently missing suitable field for external references and
not correctly working the CONTENT MATCHES filter).
Not FAILED (incl. SKIPPED) test are not reported.
This keyword must be used in the [Teardown] setting of the affected test
or as the first line of the test if FastFail module is not being
used. It reports the URL of the bug on console and also puts it
into the Robot log file.</doc>
<status status="PASS" start="2026-04-18T03:05:53.661050" elapsed="0.002461"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:53.655423" elapsed="0.008155"/>
</kw>
<doc>Test case teardown. Show linked bugs and start fast failing in case of failure.</doc>
<status status="PASS" start="2026-04-18T03:05:53.654632" elapsed="0.008988"/>
</kw>
<doc>Configure BGP peer module with initiate-connection set to false.</doc>
<status status="PASS" start="2026-04-18T03:05:53.301565" elapsed="0.362094"/>
</test>
<test id="s1-s2-t3" name="Start_Talking_BGP_Speaker" line="100">
<kw name="Setup_Test_With_Logging_And_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Fail_This_Fast_On_Previous_Error" owner="FailFast">
<if>
<branch type="IF" condition="'''${SuiteFastFail}'''=='True'">
<kw name="Fail" owner="BuiltIn">
<arg>SKIPPED due to a failure in a previous fundamental test case.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.666963" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:53.666744" elapsed="0.000275"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.666726" elapsed="0.000316"/>
</if>
<doc>Mark (immediately) this test case as failed when fast-fail is enabled in suite.</doc>
<status status="PASS" start="2026-04-18T03:05:53.666514" elapsed="0.000574"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:53.668085" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:53.667979" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.667961" elapsed="0.000190"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:53.672934" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:53.672827" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.672810" elapsed="0.000191"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.674121" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-18T03:05:53.673670" elapsed="0.000495"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.674808" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-18T03:05:53.674399" elapsed="0.000471"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-18T03:05:53.674918" elapsed="0.000031"/>
</return>
<msg time="2026-04-18T03:05:53.675083" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-18T03:05:53.673227" elapsed="0.001881"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:53.680682" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:53.680573" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.680552" elapsed="0.000199"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:53.682017" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:53.681911" elapsed="0.000179"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.681892" elapsed="0.000223"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-18T03:05:53.682590" level="INFO">${karaf_connection_index} = 4</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-18T03:05:53.682265" elapsed="0.000352"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-18T03:05:53.683001" level="INFO">${current_connection_index} = 7</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:05:53.682779" elapsed="0.000247"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-18T03:05:53.719187" 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 "b "g "p "c "e "p "- "b "g "p "- "i "n "g "e "s "t "[78C- "[A[78Cm</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-18T03:05:53.683540" elapsed="0.035776"/>
</kw>
<msg time="2026-04-18T03:05:53.719506" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-18T03:05:53.719578" 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 "b "g "p "c "e "p "- "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:53.683187" elapsed="0.036430"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-18T03:05:53.747757" level="INFO">"i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "S "t "a "r "t "_ "T "a "l "k "i "n "g "_ "B "G "P "_ "S "p "e "a "k "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-18T03:05:53.720196" elapsed="0.027677"/>
</kw>
<msg time="2026-04-18T03:05:53.748044" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-18T03:05:53.748089" level="INFO">${message_wait} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "S "t "a "r "t "_ "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-04-18T03:05:53.719813" elapsed="0.028311"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.748455" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:53.748212" elapsed="0.000298"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.748186" elapsed="0.000374"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.749027" level="INFO"> "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "S "t "a "r "t "_ "T "a "l "k "i "n "g "_ "B "G "P "_ "S "p "e "a "k "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:53.748712" elapsed="0.000396"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.749393" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:53.749175" elapsed="0.000272"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.749157" elapsed="0.000312"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-18T03:05:53.749505" 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-04-18T03:05:53.752146" elapsed="0.000143"/>
</kw>
<msg time="2026-04-18T03:05:53.752351" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:53.751070" elapsed="0.001417"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.752791" elapsed="0.000080"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.753141" elapsed="0.000078"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-18T03:05:53.750394" elapsed="0.002940"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-18T03:05:53.749820" elapsed="0.003627"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-18T03:05:53.681607" elapsed="0.071962"/>
</kw>
<msg time="2026-04-18T03:05:53.753665" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:05:53.753709" level="INFO">${message} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "S "t "a "r "t "_ "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-04-18T03:05:53.680906" elapsed="0.072840"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:05:53.753929" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-04-18T03:05:53.753823" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.753804" elapsed="0.000208"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.754452" elapsed="0.000026"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.754819" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:05:53.754891" elapsed="0.000015"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-18T03:05:53.680216" elapsed="0.074783"/>
</kw>
<msg time="2026-04-18T03:05:53.755094" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:05:53.755138" level="INFO">${output} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "S "t "a "r "t "_ "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-04-18T03:05:53.675498" elapsed="0.079676"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.755501" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:53.755251" elapsed="0.000331"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.755234" elapsed="0.000372"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-18T03:05:53.675349" elapsed="0.080281"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-18T03:05:53.675171" elapsed="0.080492"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-18T03:05:53.672454" elapsed="0.083265"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-18T03:05:53.667694" elapsed="0.088080"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:53.667239" elapsed="0.088580"/>
</kw>
<doc>Test case setup which skips on previous failure. If not, logs test case name to Karaf log.
Recommended to be used as the default test case setup.</doc>
<status status="PASS" start="2026-04-18T03:05:53.664336" elapsed="0.091536"/>
</kw>
<kw name="Start_BGP_Speaker" owner="BGPSpeaker">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.757119" level="INFO">${command} = python3 play.py --amount 250000 --myip=10.30.170.251 --myport=17900 --peerip=10.30.170.68 --peerport=1790 --insert=10 --withdraw=9 --prefill 10 --update single --info --results bgp.csv &amp;&gt; play.py.out</msg>
<var>${command}</var>
<arg>python3 play.py ${arguments} &amp;&gt; ${BGPSpeaker__OUTPUT_LOG}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:05:53.756781" elapsed="0.000367"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.757558" level="INFO">python3 play.py --amount 250000 --myip=10.30.170.251 --myport=17900 --peerip=10.30.170.68 --peerport=1790 --insert=10 --withdraw=9 --prefill 10 --update single --info --results bgp.csv &amp;&gt; play.py.out</msg>
<arg>${command}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:53.757306" elapsed="0.000300"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-18T03:05:53.761252" level="INFO">python3 play.py --amount 250000 --myip=10.30.170.251 --myport=17900 --peerip=10.30.170.68 --peerport=1790 --insert=10 --withdraw=9 --prefill 10 --update single --info --results bgp.csv &amp;&gt; play.py.out</msg>
<msg time="2026-04-18T03:05:53.761350" level="INFO">${output} =  python3 play.py --amount 250000 --myip=10.30.170.251 --myport=17900 --peerip=10.30.170.68 --peerport=1790 --insert=10 --withdraw=9 --prefill 10 --update single --info --results bgp.csv &amp;&gt; play.py.out...</msg>
<var>${output}</var>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-18T03:05:53.757756" elapsed="0.003620"/>
</kw>
<arg>--amount ${COUNT_PREFIX_COUNT_SINGLE} --myip=${TOOLS_SYSTEM_IP} --myport=${BGP_TOOL_PORT} --peerip=${ODL_SYSTEM_IP} --peerport=${ODL_BGP_PORT} --insert=${INSERT} --withdraw=${WITHDRAW} --prefill ${PREFILL} --update ${UPDATE} --${BGP_TOOL_LOG_LEVEL} --results ${RESULTS_FILE_NAME}</arg>
<doc>Start the BGP speaker python utility. Redirect its error output to a log file
so it can be dumped into the logs later, when stopping it. This also avoids polluting the
output seen by "Read Until Prompt" with false propmpts so it won't stop prematurely
leading to a spurious test failure, messy log content or other misbehavior.</doc>
<status status="PASS" start="2026-04-18T03:05:53.756096" elapsed="0.005341"/>
</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">
<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-04-18T03:05:53.762314" elapsed="0.000299"/>
</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-04-18T03:05:53.763463" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:53.763076" elapsed="0.000465"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.763056" elapsed="0.000512"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>'${SetupUtils__Known_Bug_ID}' != ''</arg>
<arg>Set_Known_Bug_Id</arg>
<arg>${EMPTY}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:53.763718" elapsed="0.000314"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.769100" level="INFO">${test_skipped} = False</msg>
<var>${test_skipped}</var>
<arg>len(re.findall('SKIPPED', """${TEST_MESSAGE}""")) &gt; 0</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:53.768667" elapsed="0.000462"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-04-18T03:05:53.769350" elapsed="0.000033"/>
</return>
<status status="PASS" start="2026-04-18T03:05:53.769204" elapsed="0.000211"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.769185" elapsed="0.000253"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.769604" elapsed="0.000022"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<var>${reference}</var>
<arg>${SUITE_NAME}_${TEST_NAME}</arg>
<arg>[ /\.-]</arg>
<arg>_</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.769781" elapsed="0.000020"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.769953" elapsed="0.000021"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${msg}</var>
<arg>... click for list of related bugs or create a new one if needed (with the${newline}"${reference}"${newline}reference somewhere inside)</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.770158" elapsed="0.000022"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${bugs}</var>
<arg>"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=${reference}&amp;order=bug_status"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.770332" elapsed="0.000020"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.770502" elapsed="0.000019"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.770687" elapsed="0.000020"/>
</kw>
<doc>Report that a test failed and point to linked Bugzilla bug(s).
Linked bugs must contain the ${reference} inside comments (workaround
becasue of currently missing suitable field for external references and
not correctly working the CONTENT MATCHES filter).
Not FAILED (incl. SKIPPED) test are not reported.
This keyword must be used in the [Teardown] setting of the affected test
or as the first line of the test if FastFail module is not being
used. It reports the URL of the bug on console and also puts it
into the Robot log file.</doc>
<status status="PASS" start="2026-04-18T03:05:53.768341" elapsed="0.002423"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:53.762848" elapsed="0.007967"/>
</kw>
<doc>Test case teardown. Show linked bugs and start fast failing in case of failure.</doc>
<status status="PASS" start="2026-04-18T03:05:53.761733" elapsed="0.009125"/>
</kw>
<doc>Start Python speaker to connect to ODL.</doc>
<status status="PASS" start="2026-04-18T03:05:53.663880" elapsed="0.107021"/>
</test>
<test id="s1-s2-t4" name="Wait_For_Stable_Talking_Ipv4_Topology" line="106">
<kw name="Setup_Test_With_Logging_And_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Fail_This_Fast_On_Previous_Error" owner="FailFast">
<if>
<branch type="IF" condition="'''${SuiteFastFail}'''=='True'">
<kw name="Fail" owner="BuiltIn">
<arg>SKIPPED due to a failure in a previous fundamental test case.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.774443" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:53.774222" elapsed="0.000276"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.774204" elapsed="0.000318"/>
</if>
<doc>Mark (immediately) this test case as failed when fast-fail is enabled in suite.</doc>
<status status="PASS" start="2026-04-18T03:05:53.774014" elapsed="0.000579"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:53.775653" elapsed="0.000026"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:53.775511" elapsed="0.000212"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.775493" elapsed="0.000254"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:53.782922" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:53.782813" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.782793" elapsed="0.000198"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.784041" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-18T03:05:53.783643" elapsed="0.000426"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.784542" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-18T03:05:53.784230" elapsed="0.000339"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-18T03:05:53.784615" elapsed="0.000031"/>
</return>
<msg time="2026-04-18T03:05:53.784773" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-18T03:05:53.783225" 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-04-18T03:05:53.790488" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:53.790362" elapsed="0.000189"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.790342" elapsed="0.000233"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:05:53.791828" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:53.791719" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.791701" elapsed="0.000194"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-18T03:05:53.792353" level="INFO">${karaf_connection_index} = 4</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-18T03:05:53.792043" elapsed="0.000336"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-18T03:05:53.792837" level="INFO">${current_connection_index} = 7</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:05:53.792574" elapsed="0.000289"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-18T03:05:53.832196" 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 "b "g "p "c "e "p "- "b "g "p "- "i "n "g "e "s "t "[78C- "[A[78Cm</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-18T03:05:53.793415" elapsed="0.038978"/>
</kw>
<msg time="2026-04-18T03:05:53.832697" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-18T03:05:53.832810" 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 "b "g "p "c "e "p "- "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:53.793027" elapsed="0.039847"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-18T03:05:53.869987" level="INFO">"i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "W "a "i "t "_ "F "o "r "_ "S "t "a "b "l "e "_ "T "a "l "k "i "n "g "_ "I "p "v "4 "_ "T "o "p "o "l "o "g "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-04-18T03:05:53.833812" elapsed="0.036301"/>
</kw>
<msg time="2026-04-18T03:05:53.870341" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-18T03:05:53.870388" level="INFO">${message_wait} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "W "a "i "t "_ "F "o "...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:53.833198" elapsed="0.037226"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.870800" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:53.870519" elapsed="0.000340"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.870492" elapsed="0.000394"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.871354" level="INFO"> "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "W "a "i "t "_ "F "o "r "_ "S "t "a "b "l "e "_ "T "a "l "k "i "n "g "_ "I "p "v "4 "_ "T "o "p "o "l "o "g "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-04-18T03:05:53.871038" elapsed="0.000393"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.871749" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:53.871499" elapsed="0.000307"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.871479" elapsed="0.000352"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-18T03:05:53.871869" elapsed="0.000039"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:05:53.874949" elapsed="0.000158"/>
</kw>
<msg time="2026-04-18T03:05:53.875173" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:05:53.873600" elapsed="0.001713"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.875626" elapsed="0.000081"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.875981" elapsed="0.000080"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-18T03:05:53.872763" elapsed="0.003414"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-18T03:05:53.872183" elapsed="0.004061"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-18T03:05:53.791374" elapsed="0.084970"/>
</kw>
<msg time="2026-04-18T03:05:53.876495" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:05:53.876559" level="INFO">${message} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "W "a "i "t "_ "F "o "...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:53.790732" elapsed="0.085866"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:05:53.876995" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-18T03:05:53.876878" elapsed="0.000181"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.876660" elapsed="0.000423"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.877601" 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-04-18T03:05:53.878020" elapsed="0.000042"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:05:53.878134" elapsed="0.000025"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-18T03:05:53.789997" elapsed="0.088316"/>
</kw>
<msg time="2026-04-18T03:05:53.878416" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:05:53.878464" level="INFO">${output} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "W "a "i "t "_ "F "o "...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:53.785246" elapsed="0.093254"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.878854" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:53.878596" elapsed="0.000312"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.878577" elapsed="0.000354"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-18T03:05:53.785098" elapsed="0.093857"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-18T03:05:53.784913" elapsed="0.094075"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-18T03:05:53.782345" elapsed="0.096699"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-18T03:05:53.775195" elapsed="0.103908"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:53.774748" elapsed="0.104404"/>
</kw>
<doc>Test case setup which skips on previous failure. If not, logs test case name to Karaf log.
Recommended to be used as the default test case setup.</doc>
<status status="PASS" start="2026-04-18T03:05:53.771737" elapsed="0.107469"/>
</kw>
<kw name="Wait_For_Ipv4_Topology_Prefixes_To_Become_Stable" owner="PrefixCounting">
<if>
<branch type="IF" condition="&quot;&quot;&quot;${shards_list}&quot;&quot;&quot;==&quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="Closure_From_Keyword_And_Arguments" owner="ScalarClosures">
<return>
<value>${keyword}</value>
<value>${args}</value>
<value>${kwargs}</value>
<status status="PASS" start="2026-04-18T03:05:53.899633" elapsed="0.000039"/>
</return>
<msg time="2026-04-18T03:05:53.899882" level="INFO">${getter} = ['Get_Ipv4_Topology_Count', [], {'session': 'operational', 'topology': 'example-ipv4-topology'}]</msg>
<var>${getter}</var>
<arg>Get_Ipv4_Topology_Count</arg>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>Turn keyword with given arguments into a scalar closure.</doc>
<status status="PASS" start="2026-04-18T03:05:53.899217" elapsed="0.000699"/>
</kw>
<status status="PASS" start="2026-04-18T03:05:53.896782" elapsed="0.003185"/>
</branch>
<branch type="ELSE">
<kw name="Closure_From_Keyword_And_Arguments" owner="ScalarClosures">
<var>${getter}</var>
<arg>Get_Ipv4_Topology_Count_With_Shards_Check</arg>
<arg>${shards_list}</arg>
<arg>${shards_details}</arg>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>Turn keyword with given arguments into a scalar closure.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.900231" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:53.899996" elapsed="0.000317"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.896762" elapsed="0.003592"/>
</if>
<kw name="Closure_From_Keyword_And_Arguments" owner="ScalarClosures">
<return>
<value>${keyword}</value>
<value>${args}</value>
<value>${kwargs}</value>
<status status="PASS" start="2026-04-18T03:05:53.900943" elapsed="0.000031"/>
</return>
<msg time="2026-04-18T03:05:53.901179" level="INFO">${validator} = ['WaitUtils.Excluding_Stability_Safe_Stateful_Validator_As_Keyword', ['state_holder', 'data_holder'], {'excluded_value': '0'}]</msg>
<var>${validator}</var>
<arg>WaitUtils.Excluding_Stability_Safe_Stateful_Validator_As_Keyword</arg>
<arg>state_holder</arg>
<arg>data_holder</arg>
<arg>excluded_value=${excluded_count}</arg>
<doc>Turn keyword with given arguments into a scalar closure.</doc>
<status status="PASS" start="2026-04-18T03:05:53.900603" elapsed="0.000605"/>
</kw>
<kw name="Wait_For_Getter_Error_Or_Safe_Stateful_Validator_Consecutive_Success" owner="WaitUtils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.902977" level="INFO">${tmp} = 1</msg>
<var>${tmp}</var>
<arg>int(${count})</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:53.902518" elapsed="0.000489"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.903518" level="INFO">count=1</msg>
<arg>count=${tmp}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:05:53.903202" elapsed="0.000382"/>
</kw>
<kw name="WaitUtils__Check_Sanity_And_Compute_Derived_Times" owner="WaitUtils">
<if>
<branch type="IF" condition="int(${count}) &lt; 1">
<kw name="Fail" owner="BuiltIn">
<arg>\${count} is ${count} and not at least 1.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.904684" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:53.904393" elapsed="0.000418"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.904372" elapsed="0.000468"/>
</if>
<kw name="Convert Time" owner="DateTime">
<msg time="2026-04-18T03:05:53.905326" level="INFO">${period_in_seconds} = 60.0</msg>
<var>${period_in_seconds}</var>
<arg>${period}</arg>
<arg>result_format=number</arg>
<doc>Converts between supported `time formats`.</doc>
<status status="PASS" start="2026-04-18T03:05:53.904990" elapsed="0.000371"/>
</kw>
<if>
<branch type="IF" condition="${period_in_seconds} &lt;= 0.0">
<kw name="Fail" owner="BuiltIn">
<arg>\${period} ${period} has to be positive.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.905730" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:53.905436" elapsed="0.000362"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.905417" elapsed="0.000409"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:05:53.906171" level="INFO">${date_now} = 2026-04-18 03:05:53.906</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:05:53.905980" elapsed="0.000225"/>
</kw>
<kw name="Convert Time" owner="DateTime">
<msg time="2026-04-18T03:05:53.906662" level="INFO">${timeout_in_seconds} = 980.0</msg>
<var>${timeout_in_seconds}</var>
<arg>${timeout}</arg>
<arg>result_format=number</arg>
<doc>Converts between supported `time formats`.</doc>
<status status="PASS" start="2026-04-18T03:05:53.906394" elapsed="0.000294"/>
</kw>
<kw name="Add Time To Date" owner="DateTime">
<msg time="2026-04-18T03:05:53.907182" level="INFO">${date_deadline} = 2026-04-18 03:22:13.906</msg>
<var>${date_deadline}</var>
<arg>${date_now}</arg>
<arg>${timeout_in_seconds}</arg>
<doc>Adds time to date and returns the resulting date.</doc>
<status status="PASS" start="2026-04-18T03:05:53.906848" elapsed="0.000361"/>
</kw>
<return>
<value>${timeout_in_seconds}</value>
<value>${period_in_seconds}</value>
<value>${date_deadline}</value>
<status status="PASS" start="2026-04-18T03:05:53.907257" elapsed="0.000030"/>
</return>
<msg time="2026-04-18T03:05:53.907496" level="INFO">${timeout_in_seconds} = 980.0</msg>
<msg time="2026-04-18T03:05:53.907565" level="INFO">${period_in_seconds} = 60.0</msg>
<msg time="2026-04-18T03:05:53.907610" level="INFO">${date_deadline} = 2026-04-18 03:22:13.906</msg>
<var>${timeout_in_seconds}</var>
<var>${period_in_seconds}</var>
<var>${date_deadline}</var>
<arg>timeout=${timeout}</arg>
<arg>period=${period}</arg>
<arg>count=${count}</arg>
<doc>Common checks for argument values. Return times in seconds and deadline date implied by timeout time.</doc>
<status status="PASS" start="2026-04-18T03:05:53.903927" elapsed="0.003706"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.908235" level="INFO">${maximum_sleeps} = 17</msg>
<var>${maximum_sleeps}</var>
<arg>math.ceil(${timeout_in_seconds} / ${period_in_seconds})</arg>
<arg>modules=math</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:53.907803" elapsed="0.000459"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.908773" level="INFO">${result} = No result yet.</msg>
<var>${result}</var>
<arg>No result yet.</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:05:53.908429" elapsed="0.000378"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.909368" level="INFO">${state} = 0</msg>
<var>${state}</var>
<arg>${initial_state}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:05:53.908998" elapsed="0.000405"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="Getter_And_Safe_Stateful_Validator_Have_To_Succeed_Consecutively_By_Deadline" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.911614" level="INFO">${result} = No result yet.</msg>
<var>${result}</var>
<arg>No result yet.</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:05:53.911333" elapsed="0.000308"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.912097" level="INFO">${state} = 0</msg>
<var>${state}</var>
<arg>${initial_state}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:05:53.911801" elapsed="0.000323"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.912627" level="INFO">${sleeps} = 0</msg>
<var>${sleeps}</var>
<arg>${count} - 1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:53.912283" elapsed="0.000372"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:05:53.914018" level="INFO">${date_now} = 2026-04-18 03:05:53.914</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:05:53.913861" elapsed="0.000185"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:05:53.914622" level="INFO">${time_deadline} = 979.992</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:05:53.914202" elapsed="0.000446"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.915190" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:53.914813" elapsed="0.000404"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.915547" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:53.915287" elapsed="0.000316"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.915268" elapsed="0.000359"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:05:53.913266" elapsed="0.002409"/>
</kw>
<msg time="2026-04-18T03:05:53.915774" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:05:53.915818" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:53.912824" elapsed="0.003017"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:05:53.916025" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:53.915920" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.915903" elapsed="0.000193"/>
</if>
<for flavor="IN RANGE">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_As_Is" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.918869" level="INFO">${keyword} = Get_Ipv4_Topology_Count</msg>
<msg time="2026-04-18T03:05:53.918916" level="INFO">${args} = []</msg>
<msg time="2026-04-18T03:05:53.918963" level="INFO">${kwargs} = {'session': 'operational', 'topology': 'example-ipv4-topology'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:05:53.918499" elapsed="0.000488"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Get_Ipv4_Topology_Count" owner="PrefixCounting">
<kw name="Get_Ipv4_Topology" owner="PrefixCounting">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:05:53.931617" level="INFO">GET Request : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01agv6blx930rdupfsp7wkuo902.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-18T03:05:53.931812" level="INFO">GET Response : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '293'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xmlns="urn:opendaylight:params:xml:ns:yang:odl-bgp-topology-types"/&gt;&lt;/topology-types&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-04-18T03:05:53.932007" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${PC_NW_TOPOLOGY}=${topology}?content=nonconfig</arg>
<arg>expected_status=anything</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-18T03:05:53.921865" elapsed="0.010216"/>
</kw>
<if>
<branch type="IF" condition="${response.status_code} != 200">
<kw name="Fail" owner="BuiltIn">
<arg>Get on ${topology} returned status code ${response.status_code} with message: ${response.text}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.936176" elapsed="0.000040"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:53.932496" elapsed="0.003795"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.932240" elapsed="0.004112"/>
</if>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-18T03:05:53.936483" elapsed="0.000118"/>
</return>
<msg time="2026-04-18T03:05:53.940055" level="INFO">${topology} = &lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xml...</msg>
<var>${topology}</var>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>GET the example-ipv4-topology data, check status is 200, return the topology data.</doc>
<status status="PASS" start="2026-04-18T03:05:53.920883" elapsed="0.019296"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.941954" level="INFO">${prefix_count} = 0</msg>
<var>${prefix_count}</var>
<arg>len(re.findall('"prefix":"', '''${topology}'''))</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:53.940556" elapsed="0.001502"/>
</kw>
<return>
<value>${prefix_count}</value>
<status status="PASS" start="2026-04-18T03:05:53.942179" elapsed="0.000043"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Get topology. If not fail, return number of prefixes in the topology.</doc>
<status status="PASS" start="2026-04-18T03:05:53.919658" elapsed="0.022940"/>
</kw>
<msg time="2026-04-18T03:05:53.942722" level="INFO">${result} = 0</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:05:53.919156" elapsed="0.023601"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:05:53.942824" elapsed="0.000039"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure without affecting arguments.</doc>
<status status="PASS" start="2026-04-18T03:05:53.918091" elapsed="0.024900"/>
</kw>
<msg time="2026-04-18T03:05:53.943117" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:05:53.943175" level="INFO">${message} = 0</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:53.917564" elapsed="0.025643"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:53.943438" elapsed="0.023912"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:05:53.968388" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-04-18T03:05:53.968254" elapsed="0.000203"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.968230" elapsed="0.000252"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.968666" elapsed="0.000024"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with 0.</doc>
<status status="PASS" start="2026-04-18T03:05:53.967830" elapsed="0.000921"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:05:53.968795" elapsed="0.000027"/>
</return>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:05:53.917149" elapsed="0.051768"/>
</kw>
<msg time="2026-04-18T03:05:53.969017" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:05:53.969074" level="INFO">${data} = 0</msg>
<var>${status}</var>
<var>${data}</var>
<arg>ScalarClosures.Run_Keyword_And_Collect_Garbage</arg>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:53.916718" elapsed="0.052381"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Getter failed: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:05:53.969299" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:53.969187" elapsed="0.000164"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.969168" elapsed="0.000208"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:05:53.970918" level="INFO">${date_now} = 2026-04-18 03:05:53.971</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:05:53.970742" elapsed="0.000292"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:05:53.971593" level="INFO">${time_deadline} = 979.935</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:05:53.971193" elapsed="0.000427"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.972174" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:53.971786" elapsed="0.000414"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:53.972520" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:05:53.972270" elapsed="0.000321"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.972252" elapsed="0.000363"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:05:53.970078" elapsed="0.002585"/>
</kw>
<msg time="2026-04-18T03:05:53.972768" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:05:53.972820" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:53.969574" elapsed="0.003270"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:05:53.973031" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:53.972927" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.972909" elapsed="0.000195"/>
</if>
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_After_Replacing_First_Two_Arguments" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.975155" level="INFO">${keyword} = WaitUtils.Excluding_Stability_Safe_Stateful_Validator_As_Keyword</msg>
<msg time="2026-04-18T03:05:53.975206" level="INFO">${args} = ['state_holder', 'data_holder']</msg>
<msg time="2026-04-18T03:05:53.975252" level="INFO">${kwargs} = {'excluded_value': '0'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:05:53.974841" elapsed="0.000435"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>0</arg>
<arg>${arg1}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:05:53.975441" elapsed="0.000223"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>1</arg>
<arg>${arg2}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:05:53.975825" elapsed="0.000189"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Excluding_Stability_Safe_Stateful_Validator_As_Keyword" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:05:53.977824" level="INFO">${new_state} = 0</msg>
<var>${new_state}</var>
<arg>${data}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:05:53.977399" elapsed="0.000451"/>
</kw>
<if>
<branch type="IF" condition="${data} == ${excluded_value}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Got the excluded value.</value>
<status status="PASS" start="2026-04-18T03:05:53.978089" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-18T03:05:53.977920" elapsed="0.000235"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:53.977902" elapsed="0.000276"/>
</if>
<if>
<branch type="IF" condition="${data} != ${old_state}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Data value has changed.</value>
<status status="NOT RUN" start="2026-04-18T03:05:53.978443" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:53.978232" elapsed="0.000263"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:05:53.978217" elapsed="0.000300"/>
</if>
<return>
<value>${new_state}</value>
<value>PASS</value>
<value>Validated stable: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:05:53.978568" elapsed="0.000015"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Report failure if got the excluded value or if data value changed from last time. Useful to become validator.</doc>
<status status="PASS" start="2026-04-18T03:05:53.976959" elapsed="0.001730"/>
</kw>
<msg time="2026-04-18T03:05:53.978774" level="INFO">${result} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:05:53.976242" elapsed="0.002559"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:05:53.978849" elapsed="0.000027"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure with replaced first two positional arguments.</doc>
<status status="PASS" start="2026-04-18T03:05:53.974426" elapsed="0.004542"/>
</kw>
<msg time="2026-04-18T03:05:53.979060" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:05:53.979105" level="INFO">${message} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:53.973846" elapsed="0.005282"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:05:53.979294" elapsed="0.023952"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:05:54.004287" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-04-18T03:05:54.004153" elapsed="0.000203"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:54.004130" elapsed="0.000252"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:54.004565" elapsed="0.000023"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with [0, 'FAIL', 'Got the excluded value.'].</doc>
<status status="PASS" start="2026-04-18T03:05:54.003737" elapsed="0.000912"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:05:54.004694" elapsed="0.000106"/>
</return>
<msg time="2026-04-18T03:05:54.004951" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:05:54.004998" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:05:54.005039" level="INFO">${result} = Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>ScalarClosures.Run_Closure_After_Replacing_First_Two_Arguments</arg>
<arg>${safe_validator}</arg>
<arg>${state}</arg>
<arg>${data}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:05:53.973337" elapsed="0.031726"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Validator failed: ${result}</value>
<status status="PASS" start="2026-04-18T03:05:54.005254" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-04-18T03:05:54.005147" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:54.005129" elapsed="0.000214"/>
</if>
<if>
<branch type="IF" condition="${sleeps_left} &lt;= 0">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:05:54.005435" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:54.005398" elapsed="0.000084"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:05:54.005382" elapsed="0.000122"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:54.005682" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:05:54.005818" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:54.005783" elapsed="0.000081"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:05:54.005767" elapsed="0.000118"/>
</if>
<kw name="Sleep" owner="BuiltIn">
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:54.006031" elapsed="0.000021"/>
</kw>
<var name="${sleeps_left}">0</var>
<status status="PASS" start="2026-04-18T03:05:53.916514" elapsed="0.089571"/>
</iter>
<var>${sleeps_left}</var>
<value>${count}-1</value>
<value>-1</value>
<value>-1</value>
<status status="PASS" start="2026-04-18T03:05:53.916133" elapsed="0.089989"/>
</for>
<kw name="Fail" owner="BuiltIn">
<arg>Logic error, we should have returned before.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:54.006274" elapsed="0.000039"/>
</kw>
<msg time="2026-04-18T03:05:54.006515" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:05:54.006585" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:05:54.006626" level="INFO">${result} = Validator failed: Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>count=${count}</arg>
<arg>getter=${getter}</arg>
<arg>safe_validator=${safe_validator}</arg>
<arg>initial_state=${state}</arg>
<doc>Pass only if consecutively 1 times in a row with 60 between attempts: ${getter} creates data and ${safe_validator} passes. Validator updates its state even if it reports failure. Always return validator state, status and message.</doc>
<status status="PASS" start="2026-04-18T03:05:53.910634" elapsed="0.096015"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:05:54.006841" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:54.006736" elapsed="0.000147"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:54.006719" elapsed="0.000186"/>
</if>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:05:54.008259" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:05:54.008345" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:05:54.007973" elapsed="0.000443">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:05:54.008518" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:05:54.008579" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:54.007582" elapsed="0.001022"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:05:54.008797" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:54.008680" elapsed="0.000162"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:54.008660" elapsed="0.000205"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:05:54.009285" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:05:54.009025" elapsed="0.000287"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:05:54.012456" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:05:54.012549" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:05:54.009837" elapsed="0.002774">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:05:54.012714" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:05:54.012758" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:54.009481" elapsed="0.003301"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:05:54.012964" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-18T03:05:54.012856" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:54.012838" elapsed="0.000210"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:54.013198" elapsed="0.000022"/>
</kw>
<arg>${result}</arg>
<arg>Not possible to succeed within the deadline.</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:05:54.007181" elapsed="0.006169"/>
</kw>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:05:54.014735" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:05:54.014809" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:05:54.014458" elapsed="0.000410">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:05:54.014967" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:05:54.015014" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:54.014085" elapsed="0.000952"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:05:54.015218" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:05:54.015111" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:54.015092" elapsed="0.000192"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:05:54.015699" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:05:54.015433" elapsed="0.000293"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:05:54.018675" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:05:54.018750" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:05:54.016227" elapsed="0.002581">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:05:54.018910" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:05:54.018952" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:05:54.015892" elapsed="0.003083"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:05:54.019155" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-04-18T03:05:54.019048" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-04-18T03:05:54.019029" elapsed="0.000209"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:05:54.019387" elapsed="0.000021"/>
</kw>
<arg>${result}</arg>
<arg>Getter failed</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:05:54.013700" elapsed="0.005852"/>
</kw>
<kw name="Sleep" owner="BuiltIn">
<msg time="2026-04-18T03:06:54.020410" level="INFO">Slept 1 minute.</msg>
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="PASS" start="2026-04-18T03:05:54.019709" elapsed="60.001172"/>
</kw>
<var name="${try}">1</var>
<status status="PASS" start="2026-04-18T03:05:53.909752" elapsed="60.111258"/>
</iter>
<iter>
<kw name="Getter_And_Safe_Stateful_Validator_Have_To_Succeed_Consecutively_By_Deadline" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:06:54.024272" level="INFO">${result} = No result yet.</msg>
<var>${result}</var>
<arg>No result yet.</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:06:54.023771" elapsed="0.000545"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:06:54.024983" level="INFO">${state} = 0</msg>
<var>${state}</var>
<arg>${initial_state}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:06:54.024599" elapsed="0.000413"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:06:54.025807" level="INFO">${sleeps} = 0</msg>
<var>${sleeps}</var>
<arg>${count} - 1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:06:54.025246" elapsed="0.000602"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:06:54.028456" level="INFO">${date_now} = 2026-04-18 03:06:54.028</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:06:54.028180" elapsed="0.000322"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:06:54.029440" level="INFO">${time_deadline} = 919.878</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:06:54.028850" elapsed="0.000633"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:06:54.030154" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:06:54.029702" elapsed="0.000482"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:06:54.030552" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:06:54.030270" elapsed="0.000342"/>
</branch>
<status status="PASS" start="2026-04-18T03:06:54.030245" elapsed="0.000395"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:06:54.026851" elapsed="0.003843"/>
</kw>
<msg time="2026-04-18T03:06:54.030799" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:06:54.030847" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:06:54.026111" elapsed="0.004760"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:06:54.031068" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:06:54.030954" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-04-18T03:06:54.030935" elapsed="0.000313"/>
</if>
<for flavor="IN RANGE">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_As_Is" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:06:54.034274" level="INFO">${keyword} = Get_Ipv4_Topology_Count</msg>
<msg time="2026-04-18T03:06:54.034323" level="INFO">${args} = []</msg>
<msg time="2026-04-18T03:06:54.034371" level="INFO">${kwargs} = {'session': 'operational', 'topology': 'example-ipv4-topology'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:06:54.033891" elapsed="0.000504"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Get_Ipv4_Topology_Count" owner="PrefixCounting">
<kw name="Get_Ipv4_Topology" owner="PrefixCounting">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:06:57.832244" level="INFO">GET Request : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01agv6blx930rdupfsp7wkuo902.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-18T03:06:57.861191" level="INFO">GET Response : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Transfer-Encoding': 'chunked'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xmlns="urn:opendaylight:params:xml:ns:yang:odl-bgp-topology-types"/&gt;&lt;/topology-types&gt;&lt;node&gt;&lt;node-id&gt;192.0.2.1&lt;/node-id&gt;&lt;igp-node-attributes xmlns="urn:TBD:params:xml:ns:yang:nt:l3-unicast-igp-topology"&gt;&lt;prefix&gt;&lt;prefix&gt;8.20.15.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.65.76.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.222.18.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.234.69.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.59.125.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.205.46.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.69.249.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.243.186.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.86.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.138.152.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.201.33.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.107.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.133.25.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.19.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.45.49.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.194.22.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.226.161.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.211.127.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.100.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.254.101.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.205.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.60.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.234.208.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.228.239.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.27.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.177.154.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.201.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.148.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.160.202.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.48.218.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.52.93.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.93.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.182.185.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.34.217.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.116.158.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.236.169.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.223.35.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.103.82.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.7.2.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.131.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.40.95.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.244.132.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.28.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.253.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.83.39.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.4.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.193.28.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.36.83.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.143.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.73.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.128.217.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.135.39.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.6.81.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.78.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.54.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.250.105.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.110.78.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.182.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.4.223.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.49.100.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.5.205.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.165.63.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.36.184.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.214.36.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.171.128.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.208.52.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.113.57.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.3.37.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.237.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.160.220.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.198.13.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.174.151.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.48.34.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.21.1.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.1.30.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.108.237.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.89.117.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.218.102.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.24.70.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.41.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.48.122.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.51.175.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.79.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.25.67.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.153.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.219.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.88.115.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.129.239.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.117.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.204.169.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.10.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.139.169.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.79.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.53.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.31.83.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.117.152.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.46.66.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.86.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.3.214.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.74.90.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.197.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.54.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.41.3.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.97.95.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.179.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.188.172.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.219.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.124.44.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.187.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.197.228.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.87.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.133.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.78.124.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.149.209.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.33.23.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.243.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.189.185.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.80.206.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.150.251.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.208.98.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.125.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.213.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.71.27.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.234.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.109.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.112.121.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.8.69.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.201.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.203.154.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.73.19.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.169.175.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.15.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.4.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.75.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.68.155.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.16.40.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.231.11.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.85.57.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.191.139.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.191.228.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.75.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.3.166.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.32.247.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.242.134.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.184.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.164.222.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.35.248.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.209.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.60.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.129.2.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.88.147.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.222.193.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.58.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.61.198.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.32.165.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.120.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.251.232.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.111.147.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.203.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.161.229.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.68.153.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.105.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.252.41.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.2.231.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.240.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.146.121.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.92.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.151.79.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.10.14.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.95.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.155.232.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.32.13.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.92.229.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.102.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.118.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.83.215.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.38.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.110.203.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.240.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.116.31.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.238.174.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.235.83.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.4.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.122.151.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.21.216.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.146.154.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.199.188.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.194.94.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.153.168.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.255.64.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.22.16/28&lt;/pref... (set the log level to DEBUG or TRACE to see the full content) 
 </msg>
<msg time="2026-04-18T03:06:57.861859" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${PC_NW_TOPOLOGY}=${topology}?content=nonconfig</arg>
<arg>expected_status=anything</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-18T03:06:54.037409" elapsed="3.824511"/>
</kw>
<if>
<branch type="IF" condition="${response.status_code} != 200">
<kw name="Fail" owner="BuiltIn">
<arg>Get on ${topology} returned status code ${response.status_code} with message: ${response.text}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:06:57.865034" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:06:57.862153" elapsed="0.002965"/>
</branch>
<status status="PASS" start="2026-04-18T03:06:57.862083" elapsed="0.003083"/>
</if>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-18T03:06:57.865271" elapsed="0.000079"/>
</return>
<msg time="2026-04-18T03:06:57.893595" level="INFO">${topology} = &lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xml...</msg>
<var>${topology}</var>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>GET the example-ipv4-topology data, check status is 200, return the topology data.</doc>
<status status="PASS" start="2026-04-18T03:06:54.036370" elapsed="3.857347"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:06:58.000641" level="INFO">${prefix_count} = 0</msg>
<var>${prefix_count}</var>
<arg>len(re.findall('"prefix":"', '''${topology}'''))</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:06:57.894078" elapsed="0.106676"/>
</kw>
<return>
<value>${prefix_count}</value>
<status status="PASS" start="2026-04-18T03:06:58.000893" elapsed="0.000067"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Get topology. If not fail, return number of prefixes in the topology.</doc>
<status status="PASS" start="2026-04-18T03:06:54.035097" elapsed="3.966148"/>
</kw>
<msg time="2026-04-18T03:06:58.001345" level="INFO">${result} = 0</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:06:54.034597" elapsed="3.966774"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:06:58.001423" elapsed="0.000030"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure without affecting arguments.</doc>
<status status="PASS" start="2026-04-18T03:06:54.033490" elapsed="3.968079"/>
</kw>
<msg time="2026-04-18T03:06:58.001671" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:06:58.001717" level="INFO">${message} = 0</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:06:54.032927" elapsed="3.968815"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:06:58.001989" elapsed="0.028891"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:06:58.031921" elapsed="0.000037"/>
</return>
<status status="PASS" start="2026-04-18T03:06:58.031783" elapsed="0.000211"/>
</branch>
<status status="PASS" start="2026-04-18T03:06:58.031759" elapsed="0.000261"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:06:58.032193" elapsed="0.000023"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with 0.</doc>
<status status="PASS" start="2026-04-18T03:06:58.031341" elapsed="0.000935"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:06:58.032319" elapsed="0.000027"/>
</return>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:06:54.032376" elapsed="4.000068"/>
</kw>
<msg time="2026-04-18T03:06:58.032611" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:06:58.032665" level="INFO">${data} = 0</msg>
<var>${status}</var>
<var>${data}</var>
<arg>ScalarClosures.Run_Keyword_And_Collect_Garbage</arg>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:06:54.031908" elapsed="4.000781"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Getter failed: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:06:58.032885" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:06:58.032771" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-04-18T03:06:58.032752" elapsed="0.000207"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:06:58.034592" level="INFO">${date_now} = 2026-04-18 03:06:58.034</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:06:58.034395" elapsed="0.000234"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:06:58.035336" level="INFO">${time_deadline} = 915.872</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:06:58.034862" elapsed="0.000504"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:06:58.035963" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:06:58.035554" elapsed="0.000437"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:06:58.036314" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:06:58.036061" elapsed="0.000309"/>
</branch>
<status status="PASS" start="2026-04-18T03:06:58.036043" elapsed="0.000351"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:06:58.033711" elapsed="0.002732"/>
</kw>
<msg time="2026-04-18T03:06:58.036560" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:06:58.036608" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:06:58.033151" elapsed="0.003481"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:06:58.036904" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:06:58.036792" elapsed="0.000164"/>
</branch>
<status status="PASS" start="2026-04-18T03:06:58.036772" elapsed="0.000206"/>
</if>
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_After_Replacing_First_Two_Arguments" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:06:58.039104" level="INFO">${keyword} = WaitUtils.Excluding_Stability_Safe_Stateful_Validator_As_Keyword</msg>
<msg time="2026-04-18T03:06:58.039155" level="INFO">${args} = ['0', 0]</msg>
<msg time="2026-04-18T03:06:58.039202" level="INFO">${kwargs} = {'excluded_value': '0'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:06:58.038727" elapsed="0.000497"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>0</arg>
<arg>${arg1}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:06:58.039391" elapsed="0.000231"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>1</arg>
<arg>${arg2}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:06:58.039792" elapsed="0.000198"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Excluding_Stability_Safe_Stateful_Validator_As_Keyword" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:06:58.041775" level="INFO">${new_state} = 0</msg>
<var>${new_state}</var>
<arg>${data}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:06:58.041308" elapsed="0.000503"/>
</kw>
<if>
<branch type="IF" condition="${data} == ${excluded_value}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Got the excluded value.</value>
<status status="PASS" start="2026-04-18T03:06:58.042133" elapsed="0.000036"/>
</return>
<status status="PASS" start="2026-04-18T03:06:58.041904" elapsed="0.000318"/>
</branch>
<status status="PASS" start="2026-04-18T03:06:58.041879" elapsed="0.000376"/>
</if>
<if>
<branch type="IF" condition="${data} != ${old_state}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Data value has changed.</value>
<status status="NOT RUN" start="2026-04-18T03:06:58.042402" elapsed="0.000191"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:06:58.042342" elapsed="0.000315"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:06:58.042312" elapsed="0.000381"/>
</if>
<return>
<value>${new_state}</value>
<value>PASS</value>
<value>Validated stable: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:06:58.042758" elapsed="0.000022"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Report failure if got the excluded value or if data value changed from last time. Useful to become validator.</doc>
<status status="PASS" start="2026-04-18T03:06:58.040859" elapsed="0.002065"/>
</kw>
<msg time="2026-04-18T03:06:58.043019" level="INFO">${result} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:06:58.040158" elapsed="0.002888"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:06:58.043112" elapsed="0.000039"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure with replaced first two positional arguments.</doc>
<status status="PASS" start="2026-04-18T03:06:58.038310" elapsed="0.004962"/>
</kw>
<msg time="2026-04-18T03:06:58.043377" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:06:58.043430" level="INFO">${message} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:06:58.037753" elapsed="0.005701"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:06:58.043647" elapsed="0.026001"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:06:58.070775" elapsed="0.000038"/>
</return>
<status status="PASS" start="2026-04-18T03:06:58.070619" elapsed="0.000231"/>
</branch>
<status status="PASS" start="2026-04-18T03:06:58.070594" elapsed="0.000282"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:06:58.071044" elapsed="0.000023"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with [0, 'FAIL', 'Got the excluded value.'].</doc>
<status status="PASS" start="2026-04-18T03:06:58.070159" elapsed="0.000969"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:06:58.071174" elapsed="0.000027"/>
</return>
<msg time="2026-04-18T03:06:58.071348" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:06:58.071396" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:06:58.071437" level="INFO">${result} = Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>ScalarClosures.Run_Closure_After_Replacing_First_Two_Arguments</arg>
<arg>${safe_validator}</arg>
<arg>${state}</arg>
<arg>${data}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:06:58.037208" elapsed="0.034253"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Validator failed: ${result}</value>
<status status="PASS" start="2026-04-18T03:06:58.071674" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-18T03:06:58.071563" elapsed="0.000176"/>
</branch>
<status status="PASS" start="2026-04-18T03:06:58.071543" elapsed="0.000221"/>
</if>
<if>
<branch type="IF" condition="${sleeps_left} &lt;= 0">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:06:58.071857" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:06:58.071820" elapsed="0.000083"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:06:58.071805" elapsed="0.000122"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-18T03:06:58.072269" elapsed="0.000032"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:06:58.072430" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:06:58.072394" elapsed="0.000173"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:06:58.072376" elapsed="0.000219"/>
</if>
<kw name="Sleep" owner="BuiltIn">
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-04-18T03:06:58.072744" elapsed="0.000021"/>
</kw>
<var name="${sleeps_left}">0</var>
<status status="PASS" start="2026-04-18T03:06:54.031749" elapsed="4.041050"/>
</iter>
<var>${sleeps_left}</var>
<value>${count}-1</value>
<value>-1</value>
<value>-1</value>
<status status="PASS" start="2026-04-18T03:06:54.031306" elapsed="4.041530"/>
</for>
<kw name="Fail" owner="BuiltIn">
<arg>Logic error, we should have returned before.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:06:58.072991" elapsed="0.000020"/>
</kw>
<msg time="2026-04-18T03:06:58.073217" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:06:58.073262" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:06:58.073303" level="INFO">${result} = Validator failed: Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>count=${count}</arg>
<arg>getter=${getter}</arg>
<arg>safe_validator=${safe_validator}</arg>
<arg>initial_state=${state}</arg>
<doc>Pass only if consecutively 1 times in a row with 60 between attempts: ${getter} creates data and ${safe_validator} passes. Validator updates its state even if it reports failure. Always return validator state, status and message.</doc>
<status status="PASS" start="2026-04-18T03:06:54.022488" elapsed="4.050838"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:06:58.073524" elapsed="0.000031"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:06:58.073416" elapsed="0.000170"/>
</branch>
<status status="PASS" start="2026-04-18T03:06:58.073398" elapsed="0.000210"/>
</if>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:06:58.075221" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:06:58.075306" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:06:58.074903" elapsed="0.000474">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:06:58.075481" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:06:58.075524" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:06:58.074305" elapsed="0.001260"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:06:58.075752" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:06:58.075642" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-18T03:06:58.075623" elapsed="0.000195"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:06:58.076228" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:06:58.075971" elapsed="0.000285"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:06:58.079657" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:06:58.079733" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:06:58.076788" elapsed="0.003006">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:06:58.079898" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:06:58.079942" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:06:58.076423" elapsed="0.003541"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:06:58.080149" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-18T03:06:58.080040" elapsed="0.000169"/>
</branch>
<status status="PASS" start="2026-04-18T03:06:58.080021" elapsed="0.000212"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:06:58.080385" elapsed="0.000022"/>
</kw>
<arg>${result}</arg>
<arg>Not possible to succeed within the deadline.</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:06:58.073889" elapsed="0.006666"/>
</kw>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:06:58.081874" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:06:58.081955" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:06:58.081588" elapsed="0.000429">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:06:58.082120" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:06:58.082163" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:06:58.081225" elapsed="0.000962"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:06:58.082374" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:06:58.082263" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-18T03:06:58.082244" elapsed="0.000197"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:06:58.082892" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:06:58.082608" elapsed="0.000314"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:06:58.086041" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:06:58.086118" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:06:58.083435" elapsed="0.002743">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:06:58.086323" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:06:58.086366" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:06:58.083096" elapsed="0.003292"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:06:58.086592" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-18T03:06:58.086465" elapsed="0.000188"/>
</branch>
<status status="PASS" start="2026-04-18T03:06:58.086445" elapsed="0.000233"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:06:58.086860" elapsed="0.000023"/>
</kw>
<arg>${result}</arg>
<arg>Getter failed</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:06:58.080843" elapsed="0.006173"/>
</kw>
<kw name="Sleep" owner="BuiltIn">
<msg time="2026-04-18T03:07:58.089582" level="INFO">Slept 1 minute.</msg>
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="PASS" start="2026-04-18T03:06:58.087171" elapsed="60.005181"/>
</kw>
<var name="${try}">2</var>
<status status="PASS" start="2026-04-18T03:06:54.021446" elapsed="64.071127"/>
</iter>
<iter>
<kw name="Getter_And_Safe_Stateful_Validator_Have_To_Succeed_Consecutively_By_Deadline" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:07:58.098955" level="INFO">${result} = No result yet.</msg>
<var>${result}</var>
<arg>No result yet.</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:07:58.098241" elapsed="0.000749"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:07:58.099496" level="INFO">${state} = 0</msg>
<var>${state}</var>
<arg>${initial_state}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:07:58.099169" elapsed="0.000355"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:07:58.100137" level="INFO">${sleeps} = 0</msg>
<var>${sleeps}</var>
<arg>${count} - 1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:07:58.099712" elapsed="0.000452"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:07:58.102271" level="INFO">${date_now} = 2026-04-18 03:07:58.102</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:07:58.102054" elapsed="0.000246"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:07:58.102939" level="INFO">${time_deadline} = 855.804</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:07:58.102463" elapsed="0.000509"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:07:58.103576" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:07:58.103144" elapsed="0.000462"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:07:58.103979" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:07:58.103701" elapsed="0.000345"/>
</branch>
<status status="PASS" start="2026-04-18T03:07:58.103669" elapsed="0.000408"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:07:58.101065" elapsed="0.003068"/>
</kw>
<msg time="2026-04-18T03:07:58.104244" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:07:58.104291" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:07:58.100351" elapsed="0.003965"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:07:58.104521" elapsed="0.000038"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:07:58.104402" elapsed="0.000196"/>
</branch>
<status status="PASS" start="2026-04-18T03:07:58.104382" elapsed="0.000240"/>
</if>
<for flavor="IN RANGE">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_As_Is" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:07:58.107730" level="INFO">${keyword} = Get_Ipv4_Topology_Count</msg>
<msg time="2026-04-18T03:07:58.107780" level="INFO">${args} = []</msg>
<msg time="2026-04-18T03:07:58.107830" level="INFO">${kwargs} = {'session': 'operational', 'topology': 'example-ipv4-topology'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:07:58.107250" elapsed="0.000604"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Get_Ipv4_Topology_Count" owner="PrefixCounting">
<kw name="Get_Ipv4_Topology" owner="PrefixCounting">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:08:01.495500" level="INFO">GET Request : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01agv6blx930rdupfsp7wkuo902.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-18T03:08:01.521167" level="INFO">GET Response : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Transfer-Encoding': 'chunked'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xmlns="urn:opendaylight:params:xml:ns:yang:odl-bgp-topology-types"/&gt;&lt;/topology-types&gt;&lt;node&gt;&lt;node-id&gt;192.0.2.1&lt;/node-id&gt;&lt;igp-node-attributes xmlns="urn:TBD:params:xml:ns:yang:nt:l3-unicast-igp-topology"&gt;&lt;prefix&gt;&lt;prefix&gt;8.20.15.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.65.76.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.222.18.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.234.69.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.59.125.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.205.46.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.69.249.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.243.186.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.86.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.138.152.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.201.33.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.107.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.133.25.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.19.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.45.49.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.194.22.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.226.161.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.211.127.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.100.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.254.101.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.205.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.60.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.234.208.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.228.239.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.27.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.177.154.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.201.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.148.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.160.202.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.48.218.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.52.93.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.93.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.182.185.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.34.217.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.116.158.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.236.169.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.223.35.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.103.82.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.7.2.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.131.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.40.95.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.244.132.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.28.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.253.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.83.39.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.4.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.193.28.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.36.83.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.143.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.73.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.128.217.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.135.39.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.6.81.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.78.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.54.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.250.105.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.110.78.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.182.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.4.223.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.49.100.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.5.205.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.165.63.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.36.184.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.214.36.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.171.128.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.208.52.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.113.57.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.3.37.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.237.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.160.220.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.198.13.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.174.151.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.48.34.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.21.1.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.1.30.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.108.237.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.89.117.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.218.102.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.24.70.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.41.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.48.122.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.51.175.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.79.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.25.67.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.153.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.219.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.88.115.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.129.239.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.117.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.204.169.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.10.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.139.169.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.79.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.53.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.31.83.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.117.152.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.46.66.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.86.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.3.214.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.74.90.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.197.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.54.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.41.3.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.97.95.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.179.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.188.172.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.219.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.124.44.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.187.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.197.228.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.87.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.133.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.78.124.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.149.209.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.33.23.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.243.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.189.185.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.80.206.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.150.251.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.208.98.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.125.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.213.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.71.27.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.234.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.109.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.112.121.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.8.69.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.201.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.203.154.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.73.19.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.169.175.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.15.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.4.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.75.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.68.155.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.16.40.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.231.11.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.85.57.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.191.139.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.191.228.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.75.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.3.166.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.32.247.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.242.134.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.184.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.164.222.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.35.248.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.209.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.60.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.129.2.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.88.147.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.222.193.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.58.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.61.198.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.32.165.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.120.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.251.232.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.111.147.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.203.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.161.229.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.68.153.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.105.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.252.41.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.2.231.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.240.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.146.121.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.92.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.151.79.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.10.14.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.95.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.155.232.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.32.13.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.92.229.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.102.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.118.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.83.215.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.38.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.110.203.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.240.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.116.31.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.238.174.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.235.83.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.4.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.122.151.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.21.216.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.146.154.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.199.188.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.194.94.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.153.168.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.255.64.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.22.16/28&lt;/pref... (set the log level to DEBUG or TRACE to see the full content) 
 </msg>
<msg time="2026-04-18T03:08:01.522994" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${PC_NW_TOPOLOGY}=${topology}?content=nonconfig</arg>
<arg>expected_status=anything</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-18T03:07:58.110963" elapsed="3.412094"/>
</kw>
<if>
<branch type="IF" condition="${response.status_code} != 200">
<kw name="Fail" owner="BuiltIn">
<arg>Get on ${topology} returned status code ${response.status_code} with message: ${response.text}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:08:01.526183" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:08:01.523303" elapsed="0.002961"/>
</branch>
<status status="PASS" start="2026-04-18T03:08:01.523230" elapsed="0.003083"/>
</if>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-18T03:08:01.526417" elapsed="0.000079"/>
</return>
<msg time="2026-04-18T03:08:01.549699" level="INFO">${topology} = &lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xml...</msg>
<var>${topology}</var>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>GET the example-ipv4-topology data, check status is 200, return the topology data.</doc>
<status status="PASS" start="2026-04-18T03:07:58.109884" elapsed="3.439944"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:08:01.657418" level="INFO">${prefix_count} = 0</msg>
<var>${prefix_count}</var>
<arg>len(re.findall('"prefix":"', '''${topology}'''))</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:08:01.550219" elapsed="0.107343"/>
</kw>
<return>
<value>${prefix_count}</value>
<status status="PASS" start="2026-04-18T03:08:01.657717" elapsed="0.000071"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Get topology. If not fail, return number of prefixes in the topology.</doc>
<status status="PASS" start="2026-04-18T03:07:58.108564" elapsed="3.549526"/>
</kw>
<msg time="2026-04-18T03:08:01.658189" level="INFO">${result} = 0</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:07:58.108033" elapsed="3.550182"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:08:01.658268" elapsed="0.000030"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure without affecting arguments.</doc>
<status status="PASS" start="2026-04-18T03:07:58.106850" elapsed="3.551546"/>
</kw>
<msg time="2026-04-18T03:08:01.658496" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:08:01.658559" level="INFO">${message} = 0</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:07:58.106298" elapsed="3.552289"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:08:01.658847" elapsed="0.030239"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:08:01.690144" elapsed="0.000036"/>
</return>
<status status="PASS" start="2026-04-18T03:08:01.690005" elapsed="0.000210"/>
</branch>
<status status="PASS" start="2026-04-18T03:08:01.689980" elapsed="0.000261"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:08:01.690413" elapsed="0.000024"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with 0.</doc>
<status status="PASS" start="2026-04-18T03:08:01.689569" elapsed="0.000929"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:08:01.690560" elapsed="0.000029"/>
</return>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:07:58.105776" elapsed="3.584912"/>
</kw>
<msg time="2026-04-18T03:08:01.690790" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:08:01.690837" level="INFO">${data} = 0</msg>
<var>${status}</var>
<var>${data}</var>
<arg>ScalarClosures.Run_Keyword_And_Collect_Garbage</arg>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:07:58.105280" elapsed="3.585581"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Getter failed: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:08:01.691047" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:08:01.690939" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-18T03:08:01.690921" elapsed="0.000197"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:08:01.692634" level="INFO">${date_now} = 2026-04-18 03:08:01.693</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:08:01.692433" elapsed="0.000230"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:08:01.693196" level="INFO">${time_deadline} = 852.213</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:08:01.692818" elapsed="0.000405"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:08:01.693808" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:08:01.693388" elapsed="0.000462"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:08:01.694183" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:08:01.693927" elapsed="0.000311"/>
</branch>
<status status="PASS" start="2026-04-18T03:08:01.693906" elapsed="0.000356"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:08:01.691837" elapsed="0.002472"/>
</kw>
<msg time="2026-04-18T03:08:01.694408" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:08:01.694453" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:08:01.691280" elapsed="0.003196"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:08:01.694786" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:08:01.694677" elapsed="0.000161"/>
</branch>
<status status="PASS" start="2026-04-18T03:08:01.694657" elapsed="0.000203"/>
</if>
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_After_Replacing_First_Two_Arguments" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:08:01.696867" level="INFO">${keyword} = WaitUtils.Excluding_Stability_Safe_Stateful_Validator_As_Keyword</msg>
<msg time="2026-04-18T03:08:01.696915" level="INFO">${args} = [0, 0]</msg>
<msg time="2026-04-18T03:08:01.696961" level="INFO">${kwargs} = {'excluded_value': '0'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:08:01.696553" elapsed="0.000431"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>0</arg>
<arg>${arg1}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:08:01.697148" elapsed="0.000221"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>1</arg>
<arg>${arg2}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:08:01.697573" elapsed="0.000204"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Excluding_Stability_Safe_Stateful_Validator_As_Keyword" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:08:01.699594" level="INFO">${new_state} = 0</msg>
<var>${new_state}</var>
<arg>${data}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:08:01.699158" elapsed="0.000464"/>
</kw>
<if>
<branch type="IF" condition="${data} == ${excluded_value}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Got the excluded value.</value>
<status status="PASS" start="2026-04-18T03:08:01.699969" elapsed="0.000031"/>
</return>
<status status="PASS" start="2026-04-18T03:08:01.699699" elapsed="0.000345"/>
</branch>
<status status="PASS" start="2026-04-18T03:08:01.699677" elapsed="0.000393"/>
</if>
<if>
<branch type="IF" condition="${data} != ${old_state}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Data value has changed.</value>
<status status="NOT RUN" start="2026-04-18T03:08:01.700162" elapsed="0.000171"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:08:01.700127" elapsed="0.000244"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:08:01.700110" elapsed="0.000283"/>
</if>
<return>
<value>${new_state}</value>
<value>PASS</value>
<value>Validated stable: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:08:01.700426" elapsed="0.000015"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Report failure if got the excluded value or if data value changed from last time. Useful to become validator.</doc>
<status status="PASS" start="2026-04-18T03:08:01.698695" elapsed="0.001874"/>
</kw>
<msg time="2026-04-18T03:08:01.700657" level="INFO">${result} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:08:01.697948" elapsed="0.002735"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:08:01.700734" elapsed="0.000027"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure with replaced first two positional arguments.</doc>
<status status="PASS" start="2026-04-18T03:08:01.696139" elapsed="0.004716"/>
</kw>
<msg time="2026-04-18T03:08:01.700948" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:08:01.700994" level="INFO">${message} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:08:01.695572" elapsed="0.005446"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:08:01.701186" elapsed="0.030286"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:08:01.732565" elapsed="0.000037"/>
</return>
<status status="PASS" start="2026-04-18T03:08:01.732410" elapsed="0.000226"/>
</branch>
<status status="PASS" start="2026-04-18T03:08:01.732385" elapsed="0.000277"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:08:01.732829" elapsed="0.000024"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with [0, 'FAIL', 'Got the excluded value.'].</doc>
<status status="PASS" start="2026-04-18T03:08:01.731987" elapsed="0.000927"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:08:01.732960" elapsed="0.000027"/>
</return>
<msg time="2026-04-18T03:08:01.733132" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:08:01.733179" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:08:01.733220" level="INFO">${result} = Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>ScalarClosures.Run_Closure_After_Replacing_First_Two_Arguments</arg>
<arg>${safe_validator}</arg>
<arg>${state}</arg>
<arg>${data}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:08:01.695087" elapsed="0.038156"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Validator failed: ${result}</value>
<status status="PASS" start="2026-04-18T03:08:01.733462" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-18T03:08:01.733333" elapsed="0.000211"/>
</branch>
<status status="PASS" start="2026-04-18T03:08:01.733312" elapsed="0.000258"/>
</if>
<if>
<branch type="IF" condition="${sleeps_left} &lt;= 0">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:08:01.733663" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:08:01.733627" elapsed="0.000081"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:08:01.733611" elapsed="0.000121"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-18T03:08:01.733895" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:08:01.734033" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:08:01.733997" elapsed="0.000168"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:08:01.733980" elapsed="0.000210"/>
</if>
<kw name="Sleep" owner="BuiltIn">
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-04-18T03:08:01.734336" elapsed="0.000022"/>
</kw>
<var name="${sleeps_left}">0</var>
<status status="PASS" start="2026-04-18T03:07:58.105117" elapsed="3.629275"/>
</iter>
<var>${sleeps_left}</var>
<value>${count}-1</value>
<value>-1</value>
<value>-1</value>
<status status="PASS" start="2026-04-18T03:07:58.104674" elapsed="3.629754"/>
</for>
<kw name="Fail" owner="BuiltIn">
<arg>Logic error, we should have returned before.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:08:01.734604" elapsed="0.000022"/>
</kw>
<msg time="2026-04-18T03:08:01.734835" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:08:01.734881" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:08:01.734921" level="INFO">${result} = Validator failed: Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>count=${count}</arg>
<arg>getter=${getter}</arg>
<arg>safe_validator=${safe_validator}</arg>
<arg>initial_state=${state}</arg>
<doc>Pass only if consecutively 1 times in a row with 60 between attempts: ${getter} creates data and ${safe_validator} passes. Validator updates its state even if it reports failure. Always return validator state, status and message.</doc>
<status status="PASS" start="2026-04-18T03:07:58.095634" elapsed="3.639310"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:08:01.735170" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:08:01.735041" elapsed="0.000183"/>
</branch>
<status status="PASS" start="2026-04-18T03:08:01.735018" elapsed="0.000233"/>
</if>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:08:01.736803" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:08:01.736894" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:08:01.736487" elapsed="0.000482">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:08:01.737073" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:08:01.737116" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:08:01.736082" elapsed="0.001056"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:08:01.737325" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:08:01.737215" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-18T03:08:01.737194" elapsed="0.000199"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:08:01.737855" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:08:01.737580" elapsed="0.000303"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:08:01.741069" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:08:01.741148" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:08:01.738391" elapsed="0.002822">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:08:01.741357" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:08:01.741403" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:08:01.738052" elapsed="0.003374"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:08:01.741635" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-18T03:08:01.741505" elapsed="0.000191"/>
</branch>
<status status="PASS" start="2026-04-18T03:08:01.741484" elapsed="0.000236"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:08:01.741871" elapsed="0.000022"/>
</kw>
<arg>${result}</arg>
<arg>Not possible to succeed within the deadline.</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:08:01.735599" elapsed="0.006427"/>
</kw>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:08:01.743471" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:08:01.743611" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:08:01.743144" elapsed="0.000539">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:08:01.743910" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:08:01.743963" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:08:01.742785" elapsed="0.001202"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:08:01.744209" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:08:01.744077" elapsed="0.000180"/>
</branch>
<status status="PASS" start="2026-04-18T03:08:01.744053" elapsed="0.000227"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:08:01.744741" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:08:01.744444" elapsed="0.000325"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:08:01.747891" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:08:01.747979" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:08:01.745291" elapsed="0.002754">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:08:01.748292" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:08:01.748336" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:08:01.744942" elapsed="0.003417"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:08:01.748581" elapsed="0.000030"/>
</return>
<status status="PASS" start="2026-04-18T03:08:01.748444" elapsed="0.000205"/>
</branch>
<status status="PASS" start="2026-04-18T03:08:01.748420" elapsed="0.000255"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:08:01.748834" elapsed="0.000022"/>
</kw>
<arg>${result}</arg>
<arg>Getter failed</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:08:01.742317" elapsed="0.006682"/>
</kw>
<kw name="Sleep" owner="BuiltIn">
<msg time="2026-04-18T03:09:01.749983" level="INFO">Slept 1 minute.</msg>
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="PASS" start="2026-04-18T03:08:01.749161" elapsed="60.001337"/>
</kw>
<var name="${try}">3</var>
<status status="PASS" start="2026-04-18T03:07:58.093323" elapsed="63.657386"/>
</iter>
<iter>
<kw name="Getter_And_Safe_Stateful_Validator_Have_To_Succeed_Consecutively_By_Deadline" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:09:01.755379" level="INFO">${result} = No result yet.</msg>
<var>${result}</var>
<arg>No result yet.</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:09:01.754619" elapsed="0.000818"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:09:01.756128" level="INFO">${state} = 0</msg>
<var>${state}</var>
<arg>${initial_state}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:09:01.755691" elapsed="0.000475"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:09:01.756929" level="INFO">${sleeps} = 0</msg>
<var>${sleeps}</var>
<arg>${count} - 1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:09:01.756395" elapsed="0.000573"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:09:01.759307" level="INFO">${date_now} = 2026-04-18 03:09:01.759</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:09:01.759058" elapsed="0.000287"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:09:01.760130" level="INFO">${time_deadline} = 792.147</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:09:01.759589" elapsed="0.000579"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:09:01.760973" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:09:01.760403" elapsed="0.000608"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:09:01.761474" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:09:01.761120" elapsed="0.000455"/>
</branch>
<status status="PASS" start="2026-04-18T03:09:01.761088" elapsed="0.000524"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:09:01.757888" elapsed="0.003795"/>
</kw>
<msg time="2026-04-18T03:09:01.761824" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:09:01.761886" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:09:01.757210" elapsed="0.004707"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:09:01.762179" elapsed="0.000024"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:09:01.762029" elapsed="0.000223"/>
</branch>
<status status="PASS" start="2026-04-18T03:09:01.762004" elapsed="0.000279"/>
</if>
<for flavor="IN RANGE">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_As_Is" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:09:01.765402" level="INFO">${keyword} = Get_Ipv4_Topology_Count</msg>
<msg time="2026-04-18T03:09:01.765450" level="INFO">${args} = []</msg>
<msg time="2026-04-18T03:09:01.765498" level="INFO">${kwargs} = {'session': 'operational', 'topology': 'example-ipv4-topology'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:09:01.765023" elapsed="0.000499"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Get_Ipv4_Topology_Count" owner="PrefixCounting">
<kw name="Get_Ipv4_Topology" owner="PrefixCounting">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:09:05.143477" level="INFO">GET Request : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01agv6blx930rdupfsp7wkuo902.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-18T03:09:05.168907" level="INFO">GET Response : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Transfer-Encoding': 'chunked'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xmlns="urn:opendaylight:params:xml:ns:yang:odl-bgp-topology-types"/&gt;&lt;/topology-types&gt;&lt;node&gt;&lt;node-id&gt;192.0.2.1&lt;/node-id&gt;&lt;igp-node-attributes xmlns="urn:TBD:params:xml:ns:yang:nt:l3-unicast-igp-topology"&gt;&lt;prefix&gt;&lt;prefix&gt;8.20.15.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.65.76.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.222.18.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.234.69.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.59.125.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.205.46.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.69.249.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.243.186.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.86.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.138.152.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.201.33.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.107.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.133.25.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.19.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.45.49.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.194.22.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.226.161.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.211.127.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.100.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.254.101.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.205.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.60.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.234.208.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.228.239.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.27.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.177.154.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.201.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.148.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.160.202.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.48.218.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.52.93.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.93.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.182.185.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.34.217.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.116.158.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.236.169.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.223.35.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.103.82.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.7.2.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.131.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.40.95.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.244.132.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.28.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.253.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.83.39.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.4.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.193.28.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.36.83.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.143.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.73.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.128.217.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.135.39.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.6.81.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.78.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.54.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.250.105.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.110.78.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.182.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.4.223.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.49.100.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.5.205.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.165.63.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.36.184.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.214.36.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.171.128.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.208.52.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.113.57.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.3.37.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.237.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.160.220.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.198.13.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.174.151.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.48.34.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.21.1.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.1.30.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.108.237.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.89.117.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.218.102.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.24.70.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.41.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.48.122.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.51.175.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.79.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.25.67.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.153.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.219.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.88.115.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.129.239.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.117.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.204.169.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.10.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.139.169.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.79.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.53.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.31.83.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.117.152.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.46.66.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.86.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.3.214.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.74.90.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.197.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.54.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.41.3.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.97.95.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.179.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.188.172.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.219.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.124.44.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.187.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.197.228.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.87.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.133.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.78.124.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.149.209.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.33.23.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.243.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.189.185.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.80.206.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.150.251.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.208.98.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.125.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.213.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.71.27.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.234.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.109.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.112.121.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.8.69.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.201.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.203.154.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.73.19.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.169.175.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.15.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.4.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.75.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.68.155.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.16.40.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.231.11.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.85.57.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.191.139.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.191.228.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.75.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.3.166.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.32.247.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.242.134.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.184.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.164.222.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.35.248.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.209.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.60.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.129.2.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.88.147.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.222.193.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.58.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.61.198.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.32.165.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.120.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.251.232.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.111.147.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.203.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.161.229.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.68.153.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.105.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.252.41.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.2.231.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.240.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.146.121.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.92.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.151.79.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.10.14.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.95.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.155.232.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.32.13.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.92.229.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.102.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.118.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.83.215.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.38.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.110.203.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.240.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.116.31.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.238.174.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.235.83.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.4.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.122.151.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.21.216.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.146.154.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.199.188.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.194.94.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.153.168.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.255.64.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.22.16/28&lt;/pref... (set the log level to DEBUG or TRACE to see the full content) 
 </msg>
<msg time="2026-04-18T03:09:05.171322" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${PC_NW_TOPOLOGY}=${topology}?content=nonconfig</arg>
<arg>expected_status=anything</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-18T03:09:01.768462" elapsed="3.402927"/>
</kw>
<if>
<branch type="IF" condition="${response.status_code} != 200">
<kw name="Fail" owner="BuiltIn">
<arg>Get on ${topology} returned status code ${response.status_code} with message: ${response.text}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:09:05.174627" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:09:05.171657" elapsed="0.003276"/>
</branch>
<status status="PASS" start="2026-04-18T03:09:05.171581" elapsed="0.003412"/>
</if>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-18T03:09:05.175100" elapsed="0.000081"/>
</return>
<msg time="2026-04-18T03:09:05.182594" level="INFO">${topology} = &lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xml...</msg>
<var>${topology}</var>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>GET the example-ipv4-topology data, check status is 200, return the topology data.</doc>
<status status="PASS" start="2026-04-18T03:09:01.767477" elapsed="3.415239"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:09:05.276852" level="INFO">${prefix_count} = 0</msg>
<var>${prefix_count}</var>
<arg>len(re.findall('"prefix":"', '''${topology}'''))</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:09:05.183089" elapsed="0.093897"/>
</kw>
<return>
<value>${prefix_count}</value>
<status status="PASS" start="2026-04-18T03:09:05.277155" elapsed="0.000081"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Get topology. If not fail, return number of prefixes in the topology.</doc>
<status status="PASS" start="2026-04-18T03:09:01.766194" elapsed="3.511455"/>
</kw>
<msg time="2026-04-18T03:09:05.277788" level="INFO">${result} = 0</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:09:01.765716" elapsed="3.512109"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:09:05.277901" elapsed="0.000045"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure without affecting arguments.</doc>
<status status="PASS" start="2026-04-18T03:09:01.764658" elapsed="3.513434"/>
</kw>
<msg time="2026-04-18T03:09:05.278235" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:09:05.278299" level="INFO">${message} = 0</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:09:01.764117" elapsed="3.514214"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:09:05.278665" elapsed="0.026179"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:09:05.305877" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-04-18T03:09:05.305740" elapsed="0.000207"/>
</branch>
<status status="PASS" start="2026-04-18T03:09:05.305716" elapsed="0.000257"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:09:05.306142" elapsed="0.000024"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with 0.</doc>
<status status="PASS" start="2026-04-18T03:09:05.305302" elapsed="0.000927"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:09:05.306274" elapsed="0.000028"/>
</return>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:09:01.763705" elapsed="3.542696"/>
</kw>
<msg time="2026-04-18T03:09:05.306505" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:09:05.306574" level="INFO">${data} = 0</msg>
<var>${status}</var>
<var>${data}</var>
<arg>ScalarClosures.Run_Keyword_And_Collect_Garbage</arg>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:09:01.763203" elapsed="3.543395"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Getter failed: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:09:05.306799" elapsed="0.000024"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:09:05.306678" elapsed="0.000186"/>
</branch>
<status status="PASS" start="2026-04-18T03:09:05.306659" elapsed="0.000229"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:09:05.308356" level="INFO">${date_now} = 2026-04-18 03:09:05.308</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:09:05.308179" elapsed="0.000205"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:09:05.309003" level="INFO">${time_deadline} = 788.598</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:09:05.308553" elapsed="0.000477"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:09:05.309611" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:09:05.309195" elapsed="0.000443"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:09:05.309957" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:09:05.309709" elapsed="0.000303"/>
</branch>
<status status="PASS" start="2026-04-18T03:09:05.309690" elapsed="0.000346"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:09:05.307587" elapsed="0.002495"/>
</kw>
<msg time="2026-04-18T03:09:05.310180" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:09:05.310228" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:09:05.307061" elapsed="0.003197"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:09:05.310554" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:09:05.310428" elapsed="0.000179"/>
</branch>
<status status="PASS" start="2026-04-18T03:09:05.310409" elapsed="0.000220"/>
</if>
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_After_Replacing_First_Two_Arguments" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:09:05.312722" level="INFO">${keyword} = WaitUtils.Excluding_Stability_Safe_Stateful_Validator_As_Keyword</msg>
<msg time="2026-04-18T03:09:05.312786" level="INFO">${args} = [0, 0]</msg>
<msg time="2026-04-18T03:09:05.312842" level="INFO">${kwargs} = {'excluded_value': '0'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:09:05.312286" elapsed="0.000581"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>0</arg>
<arg>${arg1}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:09:05.313035" elapsed="0.000219"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>1</arg>
<arg>${arg2}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:09:05.313415" elapsed="0.000213"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Excluding_Stability_Safe_Stateful_Validator_As_Keyword" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:09:05.315421" level="INFO">${new_state} = 0</msg>
<var>${new_state}</var>
<arg>${data}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:09:05.315002" elapsed="0.000448"/>
</kw>
<if>
<branch type="IF" condition="${data} == ${excluded_value}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Got the excluded value.</value>
<status status="PASS" start="2026-04-18T03:09:05.315740" elapsed="0.000036"/>
</return>
<status status="PASS" start="2026-04-18T03:09:05.315550" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-04-18T03:09:05.315508" elapsed="0.000335"/>
</if>
<if>
<branch type="IF" condition="${data} != ${old_state}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Data value has changed.</value>
<status status="NOT RUN" start="2026-04-18T03:09:05.315937" elapsed="0.000236"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:09:05.315901" elapsed="0.000319"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:09:05.315884" elapsed="0.000361"/>
</if>
<return>
<value>${new_state}</value>
<value>PASS</value>
<value>Validated stable: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:09:05.316280" elapsed="0.000015"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Report failure if got the excluded value or if data value changed from last time. Useful to become validator.</doc>
<status status="PASS" start="2026-04-18T03:09:05.314515" elapsed="0.001893"/>
</kw>
<msg time="2026-04-18T03:09:05.316495" level="INFO">${result} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:09:05.313806" elapsed="0.002715"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:09:05.316597" elapsed="0.000028"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure with replaced first two positional arguments.</doc>
<status status="PASS" start="2026-04-18T03:09:05.311890" elapsed="0.004884"/>
</kw>
<msg time="2026-04-18T03:09:05.316871" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:09:05.316916" level="INFO">${message} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:09:05.311325" elapsed="0.005615"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:09:05.317108" elapsed="0.031282"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:09:05.350022" elapsed="0.000037"/>
</return>
<status status="PASS" start="2026-04-18T03:09:05.349413" elapsed="0.000683"/>
</branch>
<status status="PASS" start="2026-04-18T03:09:05.349387" elapsed="0.000735"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:09:05.350291" elapsed="0.000024"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with [0, 'FAIL', 'Got the excluded value.'].</doc>
<status status="PASS" start="2026-04-18T03:09:05.348970" elapsed="0.001407"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:09:05.350423" elapsed="0.000026"/>
</return>
<msg time="2026-04-18T03:09:05.350615" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:09:05.350662" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:09:05.350702" level="INFO">${result} = Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>ScalarClosures.Run_Closure_After_Replacing_First_Two_Arguments</arg>
<arg>${safe_validator}</arg>
<arg>${state}</arg>
<arg>${data}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:09:05.310859" elapsed="0.039866"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Validator failed: ${result}</value>
<status status="PASS" start="2026-04-18T03:09:05.350914" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-04-18T03:09:05.350807" elapsed="0.000169"/>
</branch>
<status status="PASS" start="2026-04-18T03:09:05.350789" elapsed="0.000211"/>
</if>
<if>
<branch type="IF" condition="${sleeps_left} &lt;= 0">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:09:05.351091" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:09:05.351055" elapsed="0.000081"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:09:05.351039" elapsed="0.000120"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-18T03:09:05.351317" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:09:05.351451" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:09:05.351416" elapsed="0.000177"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:09:05.351400" elapsed="0.000219"/>
</if>
<kw name="Sleep" owner="BuiltIn">
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-04-18T03:09:05.351763" elapsed="0.000022"/>
</kw>
<var name="${sleeps_left}">0</var>
<status status="PASS" start="2026-04-18T03:09:01.762989" elapsed="3.588830"/>
</iter>
<var>${sleeps_left}</var>
<value>${count}-1</value>
<value>-1</value>
<value>-1</value>
<status status="PASS" start="2026-04-18T03:09:01.762339" elapsed="3.589516"/>
</for>
<kw name="Fail" owner="BuiltIn">
<arg>Logic error, we should have returned before.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:09:05.352013" elapsed="0.000021"/>
</kw>
<msg time="2026-04-18T03:09:05.352240" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:09:05.352286" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:09:05.352328" level="INFO">${result} = Validator failed: Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>count=${count}</arg>
<arg>getter=${getter}</arg>
<arg>safe_validator=${safe_validator}</arg>
<arg>initial_state=${state}</arg>
<doc>Pass only if consecutively 1 times in a row with 60 between attempts: ${getter} creates data and ${safe_validator} passes. Validator updates its state even if it reports failure. Always return validator state, status and message.</doc>
<status status="PASS" start="2026-04-18T03:09:01.752814" elapsed="3.599537"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:09:05.352563" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:09:05.352441" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-04-18T03:09:05.352423" elapsed="0.000207"/>
</if>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:09:05.354036" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:09:05.354123" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:09:05.353749" elapsed="0.000446">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:09:05.354296" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:09:05.354339" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:09:05.353334" elapsed="0.001028"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:09:05.354559" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:09:05.354436" elapsed="0.000169"/>
</branch>
<status status="PASS" start="2026-04-18T03:09:05.354418" elapsed="0.000209"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:09:05.355034" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:09:05.354778" elapsed="0.000284"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:09:05.358632" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:09:05.358738" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:09:05.355602" elapsed="0.003219">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:09:05.358964" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:09:05.359024" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:09:05.355228" elapsed="0.003829"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:09:05.359359" elapsed="0.000037"/>
</return>
<status status="PASS" start="2026-04-18T03:09:05.359201" elapsed="0.000243"/>
</branch>
<status status="PASS" start="2026-04-18T03:09:05.359169" elapsed="0.000308"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:09:05.359712" elapsed="0.000031"/>
</kw>
<arg>${result}</arg>
<arg>Not possible to succeed within the deadline.</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:09:05.352950" elapsed="0.006979"/>
</kw>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:09:05.361847" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:09:05.361952" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:09:05.361447" elapsed="0.000587">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:09:05.362201" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:09:05.362274" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:09:05.360914" elapsed="0.001393"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:09:05.362621" elapsed="0.000025"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:09:05.362416" elapsed="0.000275"/>
</branch>
<status status="PASS" start="2026-04-18T03:09:05.362388" elapsed="0.000334"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:09:05.363323" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:09:05.362933" elapsed="0.000430"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:09:05.367094" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:09:05.367172" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:09:05.364101" elapsed="0.003131">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:09:05.367439" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:09:05.367485" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:09:05.363624" elapsed="0.003885"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:09:05.367719" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-18T03:09:05.367607" elapsed="0.000174"/>
</branch>
<status status="PASS" start="2026-04-18T03:09:05.367584" elapsed="0.000222"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:09:05.367961" elapsed="0.000022"/>
</kw>
<arg>${result}</arg>
<arg>Getter failed</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:09:05.360333" elapsed="0.007784"/>
</kw>
<kw name="Sleep" owner="BuiltIn">
<msg time="2026-04-18T03:10:05.369675" level="INFO">Slept 1 minute.</msg>
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="PASS" start="2026-04-18T03:09:05.368279" elapsed="60.001874"/>
</kw>
<var name="${try}">4</var>
<status status="PASS" start="2026-04-18T03:09:01.751369" elapsed="63.618942"/>
</iter>
<iter>
<kw name="Getter_And_Safe_Stateful_Validator_Have_To_Succeed_Consecutively_By_Deadline" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:10:05.374567" level="INFO">${result} = No result yet.</msg>
<var>${result}</var>
<arg>No result yet.</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:10:05.374057" elapsed="0.000556"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:10:05.375291" level="INFO">${state} = 0</msg>
<var>${state}</var>
<arg>${initial_state}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:10:05.374860" elapsed="0.000469"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:10:05.376174" level="INFO">${sleeps} = 0</msg>
<var>${sleeps}</var>
<arg>${count} - 1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:10:05.375598" elapsed="0.000617"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:10:05.378803" level="INFO">${date_now} = 2026-04-18 03:10:05.379</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:10:05.378508" elapsed="0.000339"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:10:05.379694" level="INFO">${time_deadline} = 728.527</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:10:05.379088" elapsed="0.000646"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:10:05.380850" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:10:05.380019" elapsed="0.000894"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:10:05.381693" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:10:05.381087" elapsed="0.000734"/>
</branch>
<status status="PASS" start="2026-04-18T03:10:05.381038" elapsed="0.000840"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:10:05.377204" elapsed="0.004789"/>
</kw>
<msg time="2026-04-18T03:10:05.382221" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:10:05.382320" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:10:05.376469" elapsed="0.005902"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:10:05.382817" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:10:05.382579" elapsed="0.000351"/>
</branch>
<status status="PASS" start="2026-04-18T03:10:05.382511" elapsed="0.000469"/>
</if>
<for flavor="IN RANGE">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_As_Is" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:10:05.386658" level="INFO">${keyword} = Get_Ipv4_Topology_Count</msg>
<msg time="2026-04-18T03:10:05.386718" level="INFO">${args} = []</msg>
<msg time="2026-04-18T03:10:05.386962" level="INFO">${kwargs} = {'session': 'operational', 'topology': 'example-ipv4-topology'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:10:05.386244" elapsed="0.000746"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Get_Ipv4_Topology_Count" owner="PrefixCounting">
<kw name="Get_Ipv4_Topology" owner="PrefixCounting">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:10:08.681138" level="INFO">GET Request : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01agv6blx930rdupfsp7wkuo902.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-18T03:10:08.710343" level="INFO">GET Response : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Transfer-Encoding': 'chunked'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xmlns="urn:opendaylight:params:xml:ns:yang:odl-bgp-topology-types"/&gt;&lt;/topology-types&gt;&lt;node&gt;&lt;node-id&gt;192.0.2.1&lt;/node-id&gt;&lt;igp-node-attributes xmlns="urn:TBD:params:xml:ns:yang:nt:l3-unicast-igp-topology"&gt;&lt;prefix&gt;&lt;prefix&gt;8.20.15.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.65.76.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.222.18.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.234.69.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.59.125.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.205.46.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.69.249.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.243.186.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.86.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.138.152.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.201.33.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.107.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.133.25.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.19.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.45.49.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.194.22.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.226.161.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.211.127.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.100.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.254.101.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.205.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.60.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.234.208.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.228.239.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.27.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.177.154.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.201.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.148.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.160.202.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.48.218.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.52.93.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.93.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.182.185.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.34.217.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.116.158.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.236.169.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.223.35.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.103.82.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.7.2.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.131.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.40.95.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.244.132.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.28.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.253.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.83.39.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.4.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.193.28.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.36.83.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.143.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.73.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.128.217.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.135.39.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.6.81.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.78.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.54.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.250.105.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.110.78.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.182.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.4.223.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.49.100.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.5.205.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.165.63.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.36.184.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.214.36.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.171.128.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.208.52.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.113.57.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.3.37.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.237.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.160.220.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.198.13.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.174.151.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.48.34.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.21.1.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.1.30.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.108.237.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.89.117.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.218.102.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.24.70.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.41.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.48.122.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.51.175.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.79.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.25.67.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.153.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.219.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.88.115.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.129.239.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.117.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.204.169.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.10.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.139.169.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.79.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.53.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.31.83.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.117.152.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.46.66.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.86.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.3.214.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.74.90.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.197.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.54.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.41.3.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.97.95.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.179.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.188.172.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.219.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.124.44.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.187.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.197.228.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.87.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.133.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.78.124.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.149.209.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.33.23.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.243.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.189.185.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.80.206.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.150.251.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.208.98.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.125.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.213.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.71.27.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.234.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.109.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.112.121.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.8.69.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.201.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.203.154.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.73.19.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.169.175.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.15.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.4.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.75.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.68.155.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.16.40.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.231.11.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.85.57.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.191.139.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.191.228.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.75.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.3.166.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.32.247.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.242.134.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.184.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.164.222.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.35.248.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.209.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.60.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.129.2.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.88.147.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.222.193.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.58.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.61.198.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.32.165.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.120.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.251.232.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.111.147.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.203.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.161.229.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.68.153.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.105.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.252.41.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.2.231.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.240.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.146.121.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.92.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.151.79.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.10.14.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.95.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.155.232.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.32.13.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.92.229.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.102.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.118.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.83.215.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.38.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.110.203.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.240.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.116.31.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.238.174.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.235.83.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.4.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.122.151.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.21.216.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.146.154.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.199.188.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.194.94.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.153.168.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.255.64.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.22.16/28&lt;/pref... (set the log level to DEBUG or TRACE to see the full content) 
 </msg>
<msg time="2026-04-18T03:10:08.713717" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${PC_NW_TOPOLOGY}=${topology}?content=nonconfig</arg>
<arg>expected_status=anything</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-18T03:10:05.390127" elapsed="3.323720"/>
</kw>
<if>
<branch type="IF" condition="${response.status_code} != 200">
<kw name="Fail" owner="BuiltIn">
<arg>Get on ${topology} returned status code ${response.status_code} with message: ${response.text}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:10:08.717020" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:10:08.714117" elapsed="0.003003"/>
</branch>
<status status="PASS" start="2026-04-18T03:10:08.714039" elapsed="0.003137"/>
</if>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-18T03:10:08.717292" elapsed="0.000087"/>
</return>
<msg time="2026-04-18T03:10:08.746793" level="INFO">${topology} = &lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xml...</msg>
<var>${topology}</var>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>GET the example-ipv4-topology data, check status is 200, return the topology data.</doc>
<status status="PASS" start="2026-04-18T03:10:05.389112" elapsed="3.357801"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:10:08.851047" level="INFO">${prefix_count} = 0</msg>
<var>${prefix_count}</var>
<arg>len(re.findall('"prefix":"', '''${topology}'''))</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:10:08.747278" elapsed="0.103871"/>
</kw>
<return>
<value>${prefix_count}</value>
<status status="PASS" start="2026-04-18T03:10:08.851276" elapsed="0.000059"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Get topology. If not fail, return number of prefixes in the topology.</doc>
<status status="PASS" start="2026-04-18T03:10:05.387765" elapsed="3.463878"/>
</kw>
<msg time="2026-04-18T03:10:08.851740" level="INFO">${result} = 0</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:10:05.387199" elapsed="3.464568"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:10:08.851820" elapsed="0.000030"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure without affecting arguments.</doc>
<status status="PASS" start="2026-04-18T03:10:05.385868" elapsed="3.466185"/>
</kw>
<msg time="2026-04-18T03:10:08.852156" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:10:08.852202" level="INFO">${message} = 0</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:10:05.385322" elapsed="3.466904"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:10:08.852453" elapsed="0.029175"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:10:08.882983" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-04-18T03:10:08.882832" elapsed="0.000222"/>
</branch>
<status status="PASS" start="2026-04-18T03:10:08.882800" elapsed="0.000279"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:10:08.883250" elapsed="0.000024"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with 0.</doc>
<status status="PASS" start="2026-04-18T03:10:08.882298" elapsed="0.001038"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:10:08.883381" elapsed="0.000027"/>
</return>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:10:05.384891" elapsed="3.498617"/>
</kw>
<msg time="2026-04-18T03:10:08.883629" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:10:08.883677" level="INFO">${data} = 0</msg>
<var>${status}</var>
<var>${data}</var>
<arg>ScalarClosures.Run_Keyword_And_Collect_Garbage</arg>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:10:05.384396" elapsed="3.499305"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Getter failed: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:10:08.883889" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:10:08.883780" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-04-18T03:10:08.883761" elapsed="0.000201"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:10:08.885411" level="INFO">${date_now} = 2026-04-18 03:10:08.885</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:10:08.885237" elapsed="0.000203"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:10:08.886018" level="INFO">${time_deadline} = 725.021</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:10:08.885617" elapsed="0.000429"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:10:08.886623" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:10:08.886212" elapsed="0.000438"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:10:08.887010" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:10:08.886723" elapsed="0.000348"/>
</branch>
<status status="PASS" start="2026-04-18T03:10:08.886704" elapsed="0.000391"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:10:08.884641" elapsed="0.002503"/>
</kw>
<msg time="2026-04-18T03:10:08.887245" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:10:08.887291" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:10:08.884124" elapsed="0.003191"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:10:08.887644" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:10:08.887503" elapsed="0.000199"/>
</branch>
<status status="PASS" start="2026-04-18T03:10:08.887483" elapsed="0.000241"/>
</if>
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_After_Replacing_First_Two_Arguments" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:10:08.889711" level="INFO">${keyword} = WaitUtils.Excluding_Stability_Safe_Stateful_Validator_As_Keyword</msg>
<msg time="2026-04-18T03:10:08.889760" level="INFO">${args} = [0, 0]</msg>
<msg time="2026-04-18T03:10:08.889806" level="INFO">${kwargs} = {'excluded_value': '0'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:10:08.889382" elapsed="0.000492"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>0</arg>
<arg>${arg1}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:10:08.890043" elapsed="0.000209"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>1</arg>
<arg>${arg2}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:10:08.890412" elapsed="0.000208"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Excluding_Stability_Safe_Stateful_Validator_As_Keyword" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:10:08.892350" level="INFO">${new_state} = 0</msg>
<var>${new_state}</var>
<arg>${data}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:10:08.891946" elapsed="0.000431"/>
</kw>
<if>
<branch type="IF" condition="${data} == ${excluded_value}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Got the excluded value.</value>
<status status="PASS" start="2026-04-18T03:10:08.892640" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-18T03:10:08.892449" elapsed="0.000260"/>
</branch>
<status status="PASS" start="2026-04-18T03:10:08.892430" elapsed="0.000304"/>
</if>
<if>
<branch type="IF" condition="${data} != ${old_state}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Data value has changed.</value>
<status status="NOT RUN" start="2026-04-18T03:10:08.892824" elapsed="0.000156"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:10:08.892789" elapsed="0.000229"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:10:08.892773" elapsed="0.000267"/>
</if>
<return>
<value>${new_state}</value>
<value>PASS</value>
<value>Validated stable: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:10:08.893073" elapsed="0.000014"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Report failure if got the excluded value or if data value changed from last time. Useful to become validator.</doc>
<status status="PASS" start="2026-04-18T03:10:08.891466" elapsed="0.001729"/>
</kw>
<msg time="2026-04-18T03:10:08.893282" level="INFO">${result} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:10:08.890787" elapsed="0.002521"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:10:08.893357" elapsed="0.000027"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure with replaced first two positional arguments.</doc>
<status status="PASS" start="2026-04-18T03:10:08.888988" elapsed="0.004489"/>
</kw>
<msg time="2026-04-18T03:10:08.893603" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:10:08.893665" level="INFO">${message} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:10:08.888416" elapsed="0.005276"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:10:08.893882" elapsed="0.024536"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:10:08.919407" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-04-18T03:10:08.919276" elapsed="0.000199"/>
</branch>
<status status="PASS" start="2026-04-18T03:10:08.919253" elapsed="0.000247"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:10:08.919680" elapsed="0.000023"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with [0, 'FAIL', 'Got the excluded value.'].</doc>
<status status="PASS" start="2026-04-18T03:10:08.918871" elapsed="0.000892"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:10:08.919808" elapsed="0.000027"/>
</return>
<msg time="2026-04-18T03:10:08.919980" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:10:08.920026" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:10:08.920067" level="INFO">${result} = Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>ScalarClosures.Run_Closure_After_Replacing_First_Two_Arguments</arg>
<arg>${safe_validator}</arg>
<arg>${state}</arg>
<arg>${data}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:10:08.887952" elapsed="0.032138"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Validator failed: ${result}</value>
<status status="PASS" start="2026-04-18T03:10:08.920278" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-04-18T03:10:08.920171" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-04-18T03:10:08.920153" elapsed="0.000213"/>
</if>
<if>
<branch type="IF" condition="${sleeps_left} &lt;= 0">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:10:08.920457" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:10:08.920421" elapsed="0.000082"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:10:08.920405" elapsed="0.000136"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-18T03:10:08.920701" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:10:08.920836" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:10:08.920801" elapsed="0.000155"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:10:08.920785" elapsed="0.000197"/>
</if>
<kw name="Sleep" owner="BuiltIn">
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-04-18T03:10:08.921125" elapsed="0.000022"/>
</kw>
<var name="${sleeps_left}">0</var>
<status status="PASS" start="2026-04-18T03:10:05.384056" elapsed="3.537125"/>
</iter>
<var>${sleeps_left}</var>
<value>${count}-1</value>
<value>-1</value>
<value>-1</value>
<status status="PASS" start="2026-04-18T03:10:05.383067" elapsed="3.538150"/>
</for>
<kw name="Fail" owner="BuiltIn">
<arg>Logic error, we should have returned before.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:10:08.921372" elapsed="0.000021"/>
</kw>
<msg time="2026-04-18T03:10:08.921616" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:10:08.921662" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:10:08.921703" level="INFO">${result} = Validator failed: Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>count=${count}</arg>
<arg>getter=${getter}</arg>
<arg>safe_validator=${safe_validator}</arg>
<arg>initial_state=${state}</arg>
<doc>Pass only if consecutively 1 times in a row with 60 between attempts: ${getter} creates data and ${safe_validator} passes. Validator updates its state even if it reports failure. Always return validator state, status and message.</doc>
<status status="PASS" start="2026-04-18T03:10:05.372813" elapsed="3.548913"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:10:08.921952" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:10:08.921814" elapsed="0.000184"/>
</branch>
<status status="PASS" start="2026-04-18T03:10:08.921797" elapsed="0.000224"/>
</if>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:10:08.923353" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:10:08.923435" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:10:08.923074" elapsed="0.000429">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:10:08.923626" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:10:08.923668" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:10:08.922691" elapsed="0.001000"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:10:08.923874" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:10:08.923766" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-04-18T03:10:08.923747" elapsed="0.000192"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:10:08.924347" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:10:08.924092" elapsed="0.000282"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:10:08.927483" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:10:08.927581" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:10:08.924896" elapsed="0.002748">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:10:08.927782" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:10:08.927829" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:10:08.924557" elapsed="0.003296"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:10:08.928041" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-18T03:10:08.927932" elapsed="0.000169"/>
</branch>
<status status="PASS" start="2026-04-18T03:10:08.927912" elapsed="0.000213"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:10:08.928276" elapsed="0.000021"/>
</kw>
<arg>${result}</arg>
<arg>Not possible to succeed within the deadline.</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:10:08.922294" elapsed="0.006133"/>
</kw>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:10:08.929728" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:10:08.929802" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:10:08.929437" elapsed="0.000512">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:10:08.930065" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:10:08.930108" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:10:08.929098" elapsed="0.001033"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:10:08.930320" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:10:08.930208" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-18T03:10:08.930189" elapsed="0.000197"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:10:08.930812" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:10:08.930559" elapsed="0.000280"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:10:08.933974" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:10:08.934055" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:10:08.931403" elapsed="0.002715">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:10:08.934320" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:10:08.934365" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:10:08.931047" elapsed="0.003341"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:10:08.934808" elapsed="0.000029"/>
</return>
<status status="PASS" start="2026-04-18T03:10:08.934686" elapsed="0.000187"/>
</branch>
<status status="PASS" start="2026-04-18T03:10:08.934446" elapsed="0.000452"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:10:08.935084" elapsed="0.000025"/>
</kw>
<arg>${result}</arg>
<arg>Getter failed</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:10:08.928721" elapsed="0.006530"/>
</kw>
<kw name="Sleep" owner="BuiltIn">
<msg time="2026-04-18T03:11:08.936223" level="INFO">Slept 1 minute.</msg>
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="PASS" start="2026-04-18T03:10:08.935410" elapsed="60.001472"/>
</kw>
<var name="${try}">5</var>
<status status="PASS" start="2026-04-18T03:10:05.370939" elapsed="63.566103"/>
</iter>
<iter>
<kw name="Getter_And_Safe_Stateful_Validator_Have_To_Succeed_Consecutively_By_Deadline" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:11:08.942687" level="INFO">${result} = No result yet.</msg>
<var>${result}</var>
<arg>No result yet.</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:11:08.941843" elapsed="0.000885"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:11:08.943437" level="INFO">${state} = 0</msg>
<var>${state}</var>
<arg>${initial_state}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:11:08.942965" elapsed="0.000513"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:11:08.944411" level="INFO">${sleeps} = 0</msg>
<var>${sleeps}</var>
<arg>${count} - 1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:11:08.943785" elapsed="0.000694"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:11:08.947075" level="INFO">${date_now} = 2026-04-18 03:11:08.947</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:11:08.946815" elapsed="0.000300"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:11:08.947926" level="INFO">${time_deadline} = 664.959</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:11:08.947351" elapsed="0.000615"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:11:08.948831" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:11:08.948206" elapsed="0.000665"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:11:08.949351" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:11:08.948981" elapsed="0.000454"/>
</branch>
<status status="PASS" start="2026-04-18T03:11:08.948949" elapsed="0.000523"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:11:08.945504" elapsed="0.004066"/>
</kw>
<msg time="2026-04-18T03:11:08.949738" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:11:08.949819" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:11:08.944781" elapsed="0.005105"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:11:08.950249" elapsed="0.000031"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:11:08.950043" elapsed="0.000307"/>
</branch>
<status status="PASS" start="2026-04-18T03:11:08.950008" elapsed="0.000385"/>
</if>
<for flavor="IN RANGE">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_As_Is" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:11:08.954641" level="INFO">${keyword} = Get_Ipv4_Topology_Count</msg>
<msg time="2026-04-18T03:11:08.954692" level="INFO">${args} = []</msg>
<msg time="2026-04-18T03:11:08.954741" level="INFO">${kwargs} = {'session': 'operational', 'topology': 'example-ipv4-topology'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:11:08.954087" elapsed="0.000678"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Get_Ipv4_Topology_Count" owner="PrefixCounting">
<kw name="Get_Ipv4_Topology" owner="PrefixCounting">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:11:12.055597" level="INFO">GET Request : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01agv6blx930rdupfsp7wkuo902.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-18T03:11:12.082799" level="INFO">GET Response : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Transfer-Encoding': 'chunked'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xmlns="urn:opendaylight:params:xml:ns:yang:odl-bgp-topology-types"/&gt;&lt;/topology-types&gt;&lt;node&gt;&lt;node-id&gt;192.0.2.1&lt;/node-id&gt;&lt;igp-node-attributes xmlns="urn:TBD:params:xml:ns:yang:nt:l3-unicast-igp-topology"&gt;&lt;prefix&gt;&lt;prefix&gt;8.20.15.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.65.76.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.222.18.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.234.69.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.59.125.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.205.46.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.69.249.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.243.186.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.86.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.138.152.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.201.33.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.107.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.133.25.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.19.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.45.49.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.194.22.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.226.161.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.211.127.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.100.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.254.101.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.205.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.60.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.234.208.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.228.239.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.27.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.177.154.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.201.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.148.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.160.202.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.48.218.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.52.93.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.93.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.182.185.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.34.217.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.116.158.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.236.169.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.223.35.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.103.82.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.7.2.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.131.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.40.95.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.244.132.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.28.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.253.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.83.39.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.4.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.193.28.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.36.83.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.143.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.73.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.128.217.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.135.39.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.6.81.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.78.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.54.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.250.105.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.110.78.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.182.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.4.223.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.49.100.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.5.205.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.165.63.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.36.184.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.214.36.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.171.128.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.208.52.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.113.57.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.3.37.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.237.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.160.220.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.198.13.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.174.151.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.48.34.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.21.1.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.1.30.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.108.237.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.89.117.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.218.102.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.24.70.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.41.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.48.122.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.51.175.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.79.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.25.67.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.153.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.219.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.88.115.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.129.239.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.117.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.204.169.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.10.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.139.169.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.79.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.53.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.31.83.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.117.152.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.46.66.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.86.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.3.214.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.74.90.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.197.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.54.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.41.3.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.97.95.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.179.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.188.172.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.219.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.124.44.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.187.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.197.228.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.87.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.133.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.78.124.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.149.209.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.33.23.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.243.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.189.185.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.80.206.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.150.251.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.208.98.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.125.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.213.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.71.27.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.234.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.109.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.112.121.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.8.69.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.201.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.203.154.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.73.19.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.169.175.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.15.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.4.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.75.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.68.155.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.16.40.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.231.11.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.85.57.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.191.139.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.191.228.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.75.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.3.166.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.32.247.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.242.134.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.184.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.164.222.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.35.248.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.209.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.60.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.129.2.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.88.147.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.222.193.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.58.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.61.198.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.32.165.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.120.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.251.232.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.111.147.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.203.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.161.229.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.68.153.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.105.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.252.41.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.2.231.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.240.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.146.121.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.92.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.151.79.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.10.14.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.95.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.155.232.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.32.13.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.92.229.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.102.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.118.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.83.215.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.38.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.110.203.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.240.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.116.31.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.238.174.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.235.83.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.4.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.122.151.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.21.216.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.146.154.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.199.188.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.194.94.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.153.168.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.255.64.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.22.16/28&lt;/pref... (set the log level to DEBUG or TRACE to see the full content) 
 </msg>
<msg time="2026-04-18T03:11:12.083380" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${PC_NW_TOPOLOGY}=${topology}?content=nonconfig</arg>
<arg>expected_status=anything</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-18T03:11:08.958312" elapsed="3.125132"/>
</kw>
<if>
<branch type="IF" condition="${response.status_code} != 200">
<kw name="Fail" owner="BuiltIn">
<arg>Get on ${topology} returned status code ${response.status_code} with message: ${response.text}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:11:12.087681" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:11:12.083728" elapsed="0.004056"/>
</branch>
<status status="PASS" start="2026-04-18T03:11:12.083652" elapsed="0.004182"/>
</if>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-18T03:11:12.087946" elapsed="0.000084"/>
</return>
<msg time="2026-04-18T03:11:12.095996" level="INFO">${topology} = &lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xml...</msg>
<var>${topology}</var>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>GET the example-ipv4-topology data, check status is 200, return the topology data.</doc>
<status status="PASS" start="2026-04-18T03:11:08.957204" elapsed="3.139294"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:11:12.189928" level="INFO">${prefix_count} = 0</msg>
<var>${prefix_count}</var>
<arg>len(re.findall('"prefix":"', '''${topology}'''))</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:11:12.097072" elapsed="0.092959"/>
</kw>
<return>
<value>${prefix_count}</value>
<status status="PASS" start="2026-04-18T03:11:12.190157" elapsed="0.000060"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Get topology. If not fail, return number of prefixes in the topology.</doc>
<status status="PASS" start="2026-04-18T03:11:08.955434" elapsed="3.235067"/>
</kw>
<msg time="2026-04-18T03:11:12.190631" level="INFO">${result} = 0</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:11:08.954937" elapsed="3.235721"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:11:12.190711" elapsed="0.000031"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure without affecting arguments.</doc>
<status status="PASS" start="2026-04-18T03:11:08.953467" elapsed="3.237376"/>
</kw>
<msg time="2026-04-18T03:11:12.190943" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:11:12.190987" level="INFO">${message} = 0</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:11:08.952690" elapsed="3.238321"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:11:12.191261" elapsed="0.029335"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:11:12.221710" elapsed="0.000038"/>
</return>
<status status="PASS" start="2026-04-18T03:11:12.221570" elapsed="0.000220"/>
</branch>
<status status="PASS" start="2026-04-18T03:11:12.221543" elapsed="0.000280"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:11:12.222002" elapsed="0.000024"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with 0.</doc>
<status status="PASS" start="2026-04-18T03:11:12.221065" elapsed="0.001023"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:11:12.222132" elapsed="0.000028"/>
</return>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:11:08.952050" elapsed="3.270211"/>
</kw>
<msg time="2026-04-18T03:11:12.222363" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:11:12.222410" level="INFO">${data} = 0</msg>
<var>${status}</var>
<var>${data}</var>
<arg>ScalarClosures.Run_Keyword_And_Collect_Garbage</arg>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:11:08.951391" elapsed="3.271041"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Getter failed: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:11:12.222636" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:11:12.222508" elapsed="0.000180"/>
</branch>
<status status="PASS" start="2026-04-18T03:11:12.222490" elapsed="0.000221"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:11:12.224172" level="INFO">${date_now} = 2026-04-18 03:11:12.224</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:11:12.223995" elapsed="0.000205"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:11:12.224769" level="INFO">${time_deadline} = 661.682</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:11:12.224354" elapsed="0.000442"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:11:12.225392" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:11:12.224961" elapsed="0.000458"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:11:12.225756" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:11:12.225489" elapsed="0.000322"/>
</branch>
<status status="PASS" start="2026-04-18T03:11:12.225470" elapsed="0.000365"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:11:12.223383" elapsed="0.002500"/>
</kw>
<msg time="2026-04-18T03:11:12.225981" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:11:12.226025" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:11:12.222873" elapsed="0.003175"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:11:12.226311" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:11:12.226204" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-18T03:11:12.226185" elapsed="0.000198"/>
</if>
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_After_Replacing_First_Two_Arguments" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:11:12.228378" level="INFO">${keyword} = WaitUtils.Excluding_Stability_Safe_Stateful_Validator_As_Keyword</msg>
<msg time="2026-04-18T03:11:12.228427" level="INFO">${args} = [0, 0]</msg>
<msg time="2026-04-18T03:11:12.228472" level="INFO">${kwargs} = {'excluded_value': '0'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:11:12.228072" elapsed="0.000428"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>0</arg>
<arg>${arg1}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:11:12.228735" elapsed="0.000252"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>1</arg>
<arg>${arg2}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:11:12.229175" elapsed="0.000224"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Excluding_Stability_Safe_Stateful_Validator_As_Keyword" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:11:12.231167" level="INFO">${new_state} = 0</msg>
<var>${new_state}</var>
<arg>${data}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:11:12.230764" elapsed="0.000429"/>
</kw>
<if>
<branch type="IF" condition="${data} == ${excluded_value}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Got the excluded value.</value>
<status status="PASS" start="2026-04-18T03:11:12.231438" elapsed="0.000029"/>
</return>
<status status="PASS" start="2026-04-18T03:11:12.231264" elapsed="0.000243"/>
</branch>
<status status="PASS" start="2026-04-18T03:11:12.231245" elapsed="0.000302"/>
</if>
<if>
<branch type="IF" condition="${data} != ${old_state}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Data value has changed.</value>
<status status="NOT RUN" start="2026-04-18T03:11:12.231640" elapsed="0.000205"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:11:12.231605" elapsed="0.000281"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:11:12.231589" elapsed="0.000319"/>
</if>
<return>
<value>${new_state}</value>
<value>PASS</value>
<value>Validated stable: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:11:12.231943" elapsed="0.000014"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Report failure if got the excluded value or if data value changed from last time. Useful to become validator.</doc>
<status status="PASS" start="2026-04-18T03:11:12.230275" elapsed="0.001792"/>
</kw>
<msg time="2026-04-18T03:11:12.232153" level="INFO">${result} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:11:12.229583" elapsed="0.002595"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:11:12.232228" elapsed="0.000027"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure with replaced first two positional arguments.</doc>
<status status="PASS" start="2026-04-18T03:11:12.227677" elapsed="0.004671"/>
</kw>
<msg time="2026-04-18T03:11:12.232440" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:11:12.232485" level="INFO">${message} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:11:12.227115" elapsed="0.005394"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:11:12.232693" elapsed="0.028495"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:11:12.262305" elapsed="0.000036"/>
</return>
<status status="PASS" start="2026-04-18T03:11:12.262168" elapsed="0.000207"/>
</branch>
<status status="PASS" start="2026-04-18T03:11:12.262142" elapsed="0.000259"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:11:12.262587" elapsed="0.000024"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with [0, 'FAIL', 'Got the excluded value.'].</doc>
<status status="PASS" start="2026-04-18T03:11:12.261738" elapsed="0.000934"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:11:12.262718" elapsed="0.000027"/>
</return>
<msg time="2026-04-18T03:11:12.262891" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:11:12.262938" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:11:12.262979" level="INFO">${result} = Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>ScalarClosures.Run_Closure_After_Replacing_First_Two_Arguments</arg>
<arg>${safe_validator}</arg>
<arg>${state}</arg>
<arg>${data}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:11:12.226631" elapsed="0.036371"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Validator failed: ${result}</value>
<status status="PASS" start="2026-04-18T03:11:12.263193" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-04-18T03:11:12.263083" elapsed="0.000198"/>
</branch>
<status status="PASS" start="2026-04-18T03:11:12.263065" elapsed="0.000250"/>
</if>
<if>
<branch type="IF" condition="${sleeps_left} &lt;= 0">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:11:12.263438" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:11:12.263391" elapsed="0.000105"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:11:12.263369" elapsed="0.000176"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-18T03:11:12.263723" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:11:12.263860" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:11:12.263825" elapsed="0.000160"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:11:12.263808" elapsed="0.000203"/>
</if>
<kw name="Sleep" owner="BuiltIn">
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-04-18T03:11:12.264155" elapsed="0.000022"/>
</kw>
<var name="${sleeps_left}">0</var>
<status status="PASS" start="2026-04-18T03:11:08.951130" elapsed="3.313081"/>
</iter>
<var>${sleeps_left}</var>
<value>${count}-1</value>
<value>-1</value>
<value>-1</value>
<status status="PASS" start="2026-04-18T03:11:08.950457" elapsed="3.313793"/>
</for>
<kw name="Fail" owner="BuiltIn">
<arg>Logic error, we should have returned before.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:11:12.264437" elapsed="0.000022"/>
</kw>
<msg time="2026-04-18T03:11:12.264687" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:11:12.264732" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:11:12.264772" level="INFO">${result} = Validator failed: Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>count=${count}</arg>
<arg>getter=${getter}</arg>
<arg>safe_validator=${safe_validator}</arg>
<arg>initial_state=${state}</arg>
<doc>Pass only if consecutively 1 times in a row with 60 between attempts: ${getter} creates data and ${safe_validator} passes. Validator updates its state even if it reports failure. Always return validator state, status and message.</doc>
<status status="PASS" start="2026-04-18T03:11:08.939718" elapsed="3.325077"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:11:12.264993" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:11:12.264884" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-18T03:11:12.264866" elapsed="0.000193"/>
</if>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:11:12.266472" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:11:12.266574" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:11:12.266183" elapsed="0.000464">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:11:12.266752" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:11:12.266797" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:11:12.265788" elapsed="0.001033"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:11:12.267087" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:11:12.266910" elapsed="0.000235"/>
</branch>
<status status="PASS" start="2026-04-18T03:11:12.266878" elapsed="0.000294"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:11:12.267650" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:11:12.267365" elapsed="0.000313"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:11:12.270846" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:11:12.270923" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:11:12.268181" elapsed="0.002802">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:11:12.271085" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:11:12.271128" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:11:12.267844" elapsed="0.003306"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:11:12.271330" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-18T03:11:12.271223" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-04-18T03:11:12.271204" elapsed="0.000210"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:11:12.271579" elapsed="0.000022"/>
</kw>
<arg>${result}</arg>
<arg>Not possible to succeed within the deadline.</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:11:12.265382" elapsed="0.006350"/>
</kw>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:11:12.273043" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:11:12.273116" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:11:12.272787" elapsed="0.000387">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:11:12.273342" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:11:12.273388" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:11:12.272421" elapsed="0.000990"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:11:12.273615" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:11:12.273486" elapsed="0.000174"/>
</branch>
<status status="PASS" start="2026-04-18T03:11:12.273467" elapsed="0.000215"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:11:12.274082" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:11:12.273835" elapsed="0.000274"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:11:12.277020" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:11:12.277094" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:11:12.274623" elapsed="0.002529">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:11:12.277330" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:11:12.277375" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:11:12.274273" elapsed="0.003125"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:11:12.277609" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-18T03:11:12.277475" elapsed="0.000194"/>
</branch>
<status status="PASS" start="2026-04-18T03:11:12.277455" elapsed="0.000238"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:11:12.277843" elapsed="0.000021"/>
</kw>
<arg>${result}</arg>
<arg>Getter failed</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:11:12.272021" elapsed="0.005973"/>
</kw>
<kw name="Sleep" owner="BuiltIn">
<msg time="2026-04-18T03:12:12.278959" level="INFO">Slept 1 minute.</msg>
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="PASS" start="2026-04-18T03:11:12.278148" elapsed="60.001320"/>
</kw>
<var name="${try}">6</var>
<status status="PASS" start="2026-04-18T03:11:08.937698" elapsed="63.342025"/>
</iter>
<iter>
<kw name="Getter_And_Safe_Stateful_Validator_Have_To_Succeed_Consecutively_By_Deadline" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:12:12.284818" level="INFO">${result} = No result yet.</msg>
<var>${result}</var>
<arg>No result yet.</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:12:12.283822" elapsed="0.001079"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:12:12.286095" level="INFO">${state} = 0</msg>
<var>${state}</var>
<arg>${initial_state}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:12:12.285289" elapsed="0.000868"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:12:12.287150" level="INFO">${sleeps} = 0</msg>
<var>${sleeps}</var>
<arg>${count} - 1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:12:12.286583" elapsed="0.000606"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:12:12.289783" level="INFO">${date_now} = 2026-04-18 03:12:12.290</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:12:12.289497" elapsed="0.000334"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:12:12.290703" level="INFO">${time_deadline} = 601.616</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:12:12.290131" elapsed="0.000615"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:12:12.291566" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:12:12.290982" elapsed="0.000625"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:12:12.292090" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:12:12.291720" elapsed="0.000453"/>
</branch>
<status status="PASS" start="2026-04-18T03:12:12.291685" elapsed="0.000523"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:12:12.288172" elapsed="0.004108"/>
</kw>
<msg time="2026-04-18T03:12:12.292426" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:12:12.292492" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:12:12.287433" elapsed="0.005137"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:12:12.292856" elapsed="0.000031"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:12:12.292692" elapsed="0.000250"/>
</branch>
<status status="PASS" start="2026-04-18T03:12:12.292665" elapsed="0.000310"/>
</if>
<for flavor="IN RANGE">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_As_Is" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:12:12.296380" level="INFO">${keyword} = Get_Ipv4_Topology_Count</msg>
<msg time="2026-04-18T03:12:12.296431" level="INFO">${args} = []</msg>
<msg time="2026-04-18T03:12:12.296481" level="INFO">${kwargs} = {'session': 'operational', 'topology': 'example-ipv4-topology'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:12:12.296003" elapsed="0.000503"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Get_Ipv4_Topology_Count" owner="PrefixCounting">
<kw name="Get_Ipv4_Topology" owner="PrefixCounting">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:12:15.344929" level="INFO">GET Request : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01agv6blx930rdupfsp7wkuo902.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-18T03:12:15.362223" level="INFO">GET Response : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Transfer-Encoding': 'chunked'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xmlns="urn:opendaylight:params:xml:ns:yang:odl-bgp-topology-types"/&gt;&lt;/topology-types&gt;&lt;node&gt;&lt;node-id&gt;192.0.2.1&lt;/node-id&gt;&lt;igp-node-attributes xmlns="urn:TBD:params:xml:ns:yang:nt:l3-unicast-igp-topology"&gt;&lt;prefix&gt;&lt;prefix&gt;8.20.15.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.65.76.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.222.18.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.234.69.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.59.125.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.205.46.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.69.249.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.243.186.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.86.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.138.152.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.201.33.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.107.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.133.25.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.19.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.45.49.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.194.22.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.226.161.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.211.127.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.100.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.254.101.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.205.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.60.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.234.208.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.228.239.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.27.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.177.154.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.201.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.148.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.160.202.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.48.218.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.52.93.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.93.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.182.185.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.34.217.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.116.158.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.236.169.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.223.35.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.103.82.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.7.2.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.131.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.40.95.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.244.132.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.28.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.253.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.83.39.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.4.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.193.28.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.36.83.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.143.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.73.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.128.217.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.135.39.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.6.81.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.78.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.54.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.250.105.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.110.78.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.182.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.4.223.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.49.100.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.5.205.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.165.63.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.36.184.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.214.36.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.171.128.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.208.52.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.113.57.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.3.37.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.237.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.160.220.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.198.13.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.174.151.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.48.34.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.21.1.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.1.30.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.108.237.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.89.117.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.218.102.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.24.70.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.41.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.48.122.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.51.175.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.79.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.25.67.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.153.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.219.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.88.115.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.129.239.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.117.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.204.169.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.10.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.139.169.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.79.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.53.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.31.83.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.117.152.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.46.66.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.86.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.3.214.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.74.90.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.197.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.54.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.41.3.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.97.95.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.179.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.188.172.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.219.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.124.44.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.187.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.197.228.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.87.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.133.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.78.124.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.149.209.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.33.23.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.243.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.189.185.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.80.206.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.150.251.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.208.98.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.125.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.213.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.71.27.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.234.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.109.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.112.121.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.8.69.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.201.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.203.154.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.73.19.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.169.175.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.15.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.4.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.75.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.68.155.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.16.40.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.231.11.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.85.57.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.191.139.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.191.228.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.75.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.3.166.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.32.247.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.242.134.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.184.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.164.222.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.35.248.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.209.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.60.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.129.2.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.88.147.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.222.193.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.58.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.61.198.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.32.165.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.120.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.251.232.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.111.147.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.203.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.161.229.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.68.153.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.105.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.252.41.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.2.231.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.240.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.146.121.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.92.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.151.79.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.10.14.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.95.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.155.232.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.32.13.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.92.229.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.102.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.118.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.83.215.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.38.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.110.203.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.240.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.116.31.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.238.174.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.235.83.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.4.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.122.151.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.21.216.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.146.154.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.199.188.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.194.94.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.153.168.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.255.64.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.22.16/28&lt;/pref... (set the log level to DEBUG or TRACE to see the full content) 
 </msg>
<msg time="2026-04-18T03:12:15.365750" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${PC_NW_TOPOLOGY}=${topology}?content=nonconfig</arg>
<arg>expected_status=anything</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-18T03:12:12.299521" elapsed="3.066294"/>
</kw>
<if>
<branch type="IF" condition="${response.status_code} != 200">
<kw name="Fail" owner="BuiltIn">
<arg>Get on ${topology} returned status code ${response.status_code} with message: ${response.text}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:12:15.369019" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:12:15.366054" elapsed="0.003054"/>
</branch>
<status status="PASS" start="2026-04-18T03:12:15.365980" elapsed="0.003179"/>
</if>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-18T03:12:15.369263" elapsed="0.000081"/>
</return>
<msg time="2026-04-18T03:12:15.383199" level="INFO">${topology} = &lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xml...</msg>
<var>${topology}</var>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>GET the example-ipv4-topology data, check status is 200, return the topology data.</doc>
<status status="PASS" start="2026-04-18T03:12:12.298550" elapsed="3.084768"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:12:15.498879" level="INFO">${prefix_count} = 0</msg>
<var>${prefix_count}</var>
<arg>len(re.findall('"prefix":"', '''${topology}'''))</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:12:15.383779" elapsed="0.115226"/>
</kw>
<return>
<value>${prefix_count}</value>
<status status="PASS" start="2026-04-18T03:12:15.499144" elapsed="0.000063"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Get topology. If not fail, return number of prefixes in the topology.</doc>
<status status="PASS" start="2026-04-18T03:12:12.297246" elapsed="3.202350"/>
</kw>
<msg time="2026-04-18T03:12:15.499703" level="INFO">${result} = 0</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:12:12.296702" elapsed="3.203028"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:12:15.499786" elapsed="0.000031"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure without affecting arguments.</doc>
<status status="PASS" start="2026-04-18T03:12:12.295617" elapsed="3.204300"/>
</kw>
<msg time="2026-04-18T03:12:15.500019" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:12:15.500064" level="INFO">${message} = 0</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:12:12.295033" elapsed="3.205063"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:12:15.500392" elapsed="0.039267"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:12:15.540777" elapsed="0.000040"/>
</return>
<status status="PASS" start="2026-04-18T03:12:15.540637" elapsed="0.000215"/>
</branch>
<status status="PASS" start="2026-04-18T03:12:15.540610" elapsed="0.000269"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:12:15.541058" elapsed="0.000023"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with 0.</doc>
<status status="PASS" start="2026-04-18T03:12:15.540174" elapsed="0.000969"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:12:15.541188" elapsed="0.000028"/>
</return>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:12:12.294577" elapsed="3.246740"/>
</kw>
<msg time="2026-04-18T03:12:15.541421" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:12:15.541469" level="INFO">${data} = 0</msg>
<var>${status}</var>
<var>${data}</var>
<arg>ScalarClosures.Run_Keyword_And_Collect_Garbage</arg>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:12:12.293925" elapsed="3.247568"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Getter failed: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:12:15.541714" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:12:15.541591" elapsed="0.000173"/>
</branch>
<status status="PASS" start="2026-04-18T03:12:15.541572" elapsed="0.000215"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:12:15.543307" level="INFO">${date_now} = 2026-04-18 03:12:15.543</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:12:15.543120" elapsed="0.000216"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:12:15.543924" level="INFO">${time_deadline} = 598.363</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:12:15.543492" elapsed="0.000459"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:12:15.544547" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:12:15.544121" elapsed="0.000456"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:12:15.544910" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:12:15.544653" elapsed="0.000313"/>
</branch>
<status status="PASS" start="2026-04-18T03:12:15.544632" elapsed="0.000358"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:12:15.542468" elapsed="0.002571"/>
</kw>
<msg time="2026-04-18T03:12:15.545141" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:12:15.545188" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:12:15.541952" elapsed="0.003261"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:12:15.545518" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:12:15.545406" elapsed="0.000194"/>
</branch>
<status status="PASS" start="2026-04-18T03:12:15.545386" elapsed="0.000242"/>
</if>
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_After_Replacing_First_Two_Arguments" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:12:15.548157" level="INFO">${keyword} = WaitUtils.Excluding_Stability_Safe_Stateful_Validator_As_Keyword</msg>
<msg time="2026-04-18T03:12:15.548237" level="INFO">${args} = [0, 0]</msg>
<msg time="2026-04-18T03:12:15.548308" level="INFO">${kwargs} = {'excluded_value': '0'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:12:15.547780" elapsed="0.000555"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>0</arg>
<arg>${arg1}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:12:15.548518" elapsed="0.000257"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>1</arg>
<arg>${arg2}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:12:15.548942" elapsed="0.000196"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Excluding_Stability_Safe_Stateful_Validator_As_Keyword" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:12:15.551136" level="INFO">${new_state} = 0</msg>
<var>${new_state}</var>
<arg>${data}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:12:15.550672" elapsed="0.000502"/>
</kw>
<if>
<branch type="IF" condition="${data} == ${excluded_value}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Got the excluded value.</value>
<status status="PASS" start="2026-04-18T03:12:15.551520" elapsed="0.000093"/>
</return>
<status status="PASS" start="2026-04-18T03:12:15.551285" elapsed="0.000375"/>
</branch>
<status status="PASS" start="2026-04-18T03:12:15.551252" elapsed="0.000433"/>
</if>
<if>
<branch type="IF" condition="${data} != ${old_state}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Data value has changed.</value>
<status status="NOT RUN" start="2026-04-18T03:12:15.551780" elapsed="0.000211"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:12:15.551744" elapsed="0.000285"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:12:15.551727" elapsed="0.000324"/>
</if>
<return>
<value>${new_state}</value>
<value>PASS</value>
<value>Validated stable: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:12:15.552084" elapsed="0.000014"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Report failure if got the excluded value or if data value changed from last time. Useful to become validator.</doc>
<status status="PASS" start="2026-04-18T03:12:15.550179" elapsed="0.002030"/>
</kw>
<msg time="2026-04-18T03:12:15.552296" level="INFO">${result} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:12:15.549315" elapsed="0.003007"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:12:15.552371" elapsed="0.000028"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure with replaced first two positional arguments.</doc>
<status status="PASS" start="2026-04-18T03:12:15.547222" elapsed="0.005287"/>
</kw>
<msg time="2026-04-18T03:12:15.552679" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:12:15.552730" level="INFO">${message} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:12:15.546518" elapsed="0.006237"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:12:15.552941" elapsed="0.037168"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:12:15.591295" elapsed="0.000040"/>
</return>
<status status="PASS" start="2026-04-18T03:12:15.591155" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-04-18T03:12:15.591129" elapsed="0.000269"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:12:15.591637" elapsed="0.000024"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with [0, 'FAIL', 'Got the excluded value.'].</doc>
<status status="PASS" start="2026-04-18T03:12:15.590633" elapsed="0.001094"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:12:15.591773" elapsed="0.000028"/>
</return>
<msg time="2026-04-18T03:12:15.591951" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:12:15.591999" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:12:15.592041" level="INFO">${result} = Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>ScalarClosures.Run_Closure_After_Replacing_First_Two_Arguments</arg>
<arg>${safe_validator}</arg>
<arg>${state}</arg>
<arg>${data}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:12:15.545935" elapsed="0.046128"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Validator failed: ${result}</value>
<status status="PASS" start="2026-04-18T03:12:15.592445" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-04-18T03:12:15.592335" elapsed="0.000172"/>
</branch>
<status status="PASS" start="2026-04-18T03:12:15.592131" elapsed="0.000423"/>
</if>
<if>
<branch type="IF" condition="${sleeps_left} &lt;= 0">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:12:15.592685" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:12:15.592633" elapsed="0.000119"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:12:15.592611" elapsed="0.000175"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-18T03:12:15.593000" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:12:15.593151" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:12:15.593114" elapsed="0.000167"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:12:15.593095" elapsed="0.000213"/>
</if>
<kw name="Sleep" owner="BuiltIn">
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-04-18T03:12:15.593456" elapsed="0.000021"/>
</kw>
<var name="${sleeps_left}">0</var>
<status status="PASS" start="2026-04-18T03:12:12.293651" elapsed="3.299862"/>
</iter>
<var>${sleeps_left}</var>
<value>${count}-1</value>
<value>-1</value>
<value>-1</value>
<status status="PASS" start="2026-04-18T03:12:12.293034" elapsed="3.300539"/>
</for>
<kw name="Fail" owner="BuiltIn">
<arg>Logic error, we should have returned before.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:12:15.593769" elapsed="0.000032"/>
</kw>
<msg time="2026-04-18T03:12:15.594029" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:12:15.594075" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:12:15.594115" level="INFO">${result} = Validator failed: Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>count=${count}</arg>
<arg>getter=${getter}</arg>
<arg>safe_validator=${safe_validator}</arg>
<arg>initial_state=${state}</arg>
<doc>Pass only if consecutively 1 times in a row with 60 between attempts: ${getter} creates data and ${safe_validator} passes. Validator updates its state even if it reports failure. Always return validator state, status and message.</doc>
<status status="PASS" start="2026-04-18T03:12:12.281973" elapsed="3.312166"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:12:15.594354" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:12:15.594231" elapsed="0.000169"/>
</branch>
<status status="PASS" start="2026-04-18T03:12:15.594213" elapsed="0.000217"/>
</if>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:12:15.596081" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:12:15.596187" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:12:15.595752" elapsed="0.000508">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:12:15.596369" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:12:15.596413" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:12:15.595271" elapsed="0.001165"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:12:15.596660" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:12:15.596516" elapsed="0.000192"/>
</branch>
<status status="PASS" start="2026-04-18T03:12:15.596494" elapsed="0.000237"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:12:15.597149" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:12:15.596887" elapsed="0.000300"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:12:15.600658" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:12:15.600768" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:12:15.597806" elapsed="0.003036">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:12:15.600957" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:12:15.601001" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:12:15.597368" elapsed="0.003656"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:12:15.601228" elapsed="0.000030"/>
</return>
<status status="PASS" start="2026-04-18T03:12:15.601106" elapsed="0.000187"/>
</branch>
<status status="PASS" start="2026-04-18T03:12:15.601083" elapsed="0.000235"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:12:15.601486" elapsed="0.000024"/>
</kw>
<arg>${result}</arg>
<arg>Not possible to succeed within the deadline.</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:12:15.594831" elapsed="0.006840"/>
</kw>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:12:15.603083" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:12:15.603166" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:12:15.602785" elapsed="0.000444">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:12:15.603334" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:12:15.603376" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:12:15.602397" elapsed="0.001002"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:12:15.603645" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:12:15.603477" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-04-18T03:12:15.603457" elapsed="0.000260"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:12:15.604160" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:12:15.603894" elapsed="0.000294"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:12:15.607739" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:12:15.607849" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:12:15.604720" elapsed="0.003199">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:12:15.608124" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:12:15.608168" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:12:15.604362" elapsed="0.003830"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:12:15.608410" elapsed="0.000032"/>
</return>
<status status="PASS" start="2026-04-18T03:12:15.608286" elapsed="0.000192"/>
</branch>
<status status="PASS" start="2026-04-18T03:12:15.608259" elapsed="0.000245"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:12:15.608700" elapsed="0.000024"/>
</kw>
<arg>${result}</arg>
<arg>Getter failed</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:12:15.601994" elapsed="0.006874"/>
</kw>
<kw name="Sleep" owner="BuiltIn">
<msg time="2026-04-18T03:13:15.609876" level="INFO">Slept 1 minute.</msg>
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="PASS" start="2026-04-18T03:12:15.609031" elapsed="60.001284"/>
</kw>
<var name="${try}">7</var>
<status status="PASS" start="2026-04-18T03:12:12.280337" elapsed="63.330117"/>
</iter>
<iter>
<kw name="Getter_And_Safe_Stateful_Validator_Have_To_Succeed_Consecutively_By_Deadline" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:13:15.615360" level="INFO">${result} = No result yet.</msg>
<var>${result}</var>
<arg>No result yet.</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:13:15.614638" elapsed="0.000785"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:13:15.616718" level="INFO">${state} = 0</msg>
<var>${state}</var>
<arg>${initial_state}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:13:15.615906" elapsed="0.000871"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:13:15.617940" level="INFO">${sleeps} = 0</msg>
<var>${sleeps}</var>
<arg>${count} - 1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:13:15.617139" elapsed="0.000862"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:13:15.620938" level="INFO">${date_now} = 2026-04-18 03:13:15.621</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:13:15.620752" elapsed="0.000213"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:13:15.621520" level="INFO">${time_deadline} = 538.285</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:13:15.621125" elapsed="0.000571"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:13:15.623071" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:13:15.622110" elapsed="0.001065"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:13:15.623960" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:13:15.623351" elapsed="0.000738"/>
</branch>
<status status="PASS" start="2026-04-18T03:13:15.623303" elapsed="0.000844"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:13:15.619493" elapsed="0.004769"/>
</kw>
<msg time="2026-04-18T03:13:15.624493" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:13:15.624627" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:13:15.618373" elapsed="0.006308"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:13:15.625123" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:13:15.624865" elapsed="0.000372"/>
</branch>
<status status="PASS" start="2026-04-18T03:13:15.624824" elapsed="0.000463"/>
</if>
<for flavor="IN RANGE">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_As_Is" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:13:15.631907" level="INFO">${keyword} = Get_Ipv4_Topology_Count</msg>
<msg time="2026-04-18T03:13:15.631994" level="INFO">${args} = []</msg>
<msg time="2026-04-18T03:13:15.632042" level="INFO">${kwargs} = {'session': 'operational', 'topology': 'example-ipv4-topology'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:13:15.630894" elapsed="0.001171"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Get_Ipv4_Topology_Count" owner="PrefixCounting">
<kw name="Get_Ipv4_Topology" owner="PrefixCounting">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:13:18.663741" level="INFO">GET Request : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01agv6blx930rdupfsp7wkuo902.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-18T03:13:18.675298" level="INFO">GET Response : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Transfer-Encoding': 'chunked'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xmlns="urn:opendaylight:params:xml:ns:yang:odl-bgp-topology-types"/&gt;&lt;/topology-types&gt;&lt;node&gt;&lt;node-id&gt;192.0.2.1&lt;/node-id&gt;&lt;igp-node-attributes xmlns="urn:TBD:params:xml:ns:yang:nt:l3-unicast-igp-topology"&gt;&lt;prefix&gt;&lt;prefix&gt;8.20.15.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.65.76.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.222.18.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.234.69.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.59.125.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.205.46.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.69.249.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.243.186.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.86.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.138.152.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.201.33.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.107.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.133.25.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.19.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.45.49.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.194.22.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.226.161.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.211.127.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.100.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.254.101.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.205.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.60.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.234.208.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.228.239.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.27.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.177.154.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.201.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.148.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.160.202.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.48.218.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.52.93.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.93.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.182.185.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.34.217.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.116.158.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.236.169.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.223.35.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.103.82.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.7.2.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.131.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.40.95.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.244.132.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.28.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.253.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.83.39.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.4.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.193.28.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.36.83.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.143.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.73.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.128.217.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.135.39.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.6.81.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.78.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.54.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.250.105.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.110.78.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.182.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.4.223.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.49.100.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.5.205.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.165.63.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.36.184.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.214.36.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.171.128.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.208.52.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.113.57.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.3.37.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.237.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.160.220.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.198.13.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.174.151.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.48.34.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.21.1.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.1.30.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.108.237.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.89.117.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.218.102.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.24.70.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.41.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.48.122.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.51.175.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.79.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.25.67.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.153.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.219.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.88.115.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.129.239.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.117.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.204.169.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.10.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.139.169.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.79.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.53.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.31.83.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.117.152.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.46.66.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.86.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.3.214.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.74.90.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.197.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.54.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.41.3.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.97.95.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.179.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.188.172.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.219.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.124.44.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.187.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.197.228.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.87.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.133.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.78.124.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.149.209.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.33.23.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.243.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.189.185.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.80.206.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.150.251.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.208.98.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.125.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.213.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.71.27.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.234.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.109.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.112.121.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.8.69.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.201.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.203.154.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.73.19.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.169.175.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.15.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.4.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.75.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.68.155.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.16.40.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.231.11.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.85.57.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.191.139.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.191.228.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.75.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.3.166.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.32.247.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.242.134.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.184.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.164.222.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.35.248.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.209.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.60.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.129.2.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.88.147.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.222.193.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.58.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.61.198.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.32.165.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.120.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.251.232.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.111.147.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.203.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.161.229.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.68.153.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.105.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.252.41.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.2.231.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.240.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.146.121.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.92.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.151.79.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.10.14.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.95.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.155.232.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.32.13.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.92.229.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.102.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.118.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.83.215.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.38.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.110.203.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.240.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.116.31.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.238.174.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.235.83.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.4.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.122.151.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.21.216.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.146.154.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.199.188.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.194.94.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.153.168.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.255.64.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.22.16/28&lt;/pref... (set the log level to DEBUG or TRACE to see the full content) 
 </msg>
<msg time="2026-04-18T03:13:18.675878" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${PC_NW_TOPOLOGY}=${topology}?content=nonconfig</arg>
<arg>expected_status=anything</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-18T03:13:15.636003" elapsed="3.039935"/>
</kw>
<if>
<branch type="IF" condition="${response.status_code} != 200">
<kw name="Fail" owner="BuiltIn">
<arg>Get on ${topology} returned status code ${response.status_code} with message: ${response.text}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:13:18.679046" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:13:18.676170" elapsed="0.002959"/>
</branch>
<status status="PASS" start="2026-04-18T03:13:18.676099" elapsed="0.003077"/>
</if>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-18T03:13:18.679278" elapsed="0.000076"/>
</return>
<msg time="2026-04-18T03:13:18.687307" level="INFO">${topology} = &lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xml...</msg>
<var>${topology}</var>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>GET the example-ipv4-topology data, check status is 200, return the topology data.</doc>
<status status="PASS" start="2026-04-18T03:13:15.634686" elapsed="3.052926"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:13:18.782076" level="INFO">${prefix_count} = 0</msg>
<var>${prefix_count}</var>
<arg>len(re.findall('"prefix":"', '''${topology}'''))</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:13:18.687977" elapsed="0.094220"/>
</kw>
<return>
<value>${prefix_count}</value>
<status status="PASS" start="2026-04-18T03:13:18.782346" elapsed="0.000063"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Get topology. If not fail, return number of prefixes in the topology.</doc>
<status status="PASS" start="2026-04-18T03:13:15.632870" elapsed="3.149899"/>
</kw>
<msg time="2026-04-18T03:13:18.782896" level="INFO">${result} = 0</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:13:15.632240" elapsed="3.150685"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:13:18.782980" elapsed="0.000041"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure without affecting arguments.</doc>
<status status="PASS" start="2026-04-18T03:13:15.630022" elapsed="3.153141"/>
</kw>
<msg time="2026-04-18T03:13:18.783270" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:13:18.783315" level="INFO">${message} = 0</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:13:15.628758" elapsed="3.154581"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:13:18.783591" elapsed="0.028356"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:13:18.813013" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-04-18T03:13:18.812876" elapsed="0.000207"/>
</branch>
<status status="PASS" start="2026-04-18T03:13:18.812802" elapsed="0.000305"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:13:18.813276" elapsed="0.000023"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with 0.</doc>
<status status="PASS" start="2026-04-18T03:13:18.812391" elapsed="0.000968"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:13:18.813403" elapsed="0.000027"/>
</return>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:13:15.627765" elapsed="3.185777"/>
</kw>
<msg time="2026-04-18T03:13:18.813644" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:13:18.813690" level="INFO">${data} = 0</msg>
<var>${status}</var>
<var>${data}</var>
<arg>ScalarClosures.Run_Keyword_And_Collect_Garbage</arg>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:13:15.626701" elapsed="3.187012"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Getter failed: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:13:18.813896" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:13:18.813789" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-18T03:13:18.813771" elapsed="0.000197"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:13:18.815405" level="INFO">${date_now} = 2026-04-18 03:13:18.815</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:13:18.815232" elapsed="0.000201"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:13:18.815981" level="INFO">${time_deadline} = 535.091</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:13:18.815603" elapsed="0.000404"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:13:18.816582" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:13:18.816171" elapsed="0.000438"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:13:18.816948" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:13:18.816680" elapsed="0.000322"/>
</branch>
<status status="PASS" start="2026-04-18T03:13:18.816661" elapsed="0.000365"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:13:18.814641" elapsed="0.002432"/>
</kw>
<msg time="2026-04-18T03:13:18.817171" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:13:18.817215" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:13:18.814129" elapsed="0.003111"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:13:18.817511" elapsed="0.000029"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:13:18.817402" elapsed="0.000175"/>
</branch>
<status status="PASS" start="2026-04-18T03:13:18.817383" elapsed="0.000217"/>
</if>
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_After_Replacing_First_Two_Arguments" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:13:18.819583" level="INFO">${keyword} = WaitUtils.Excluding_Stability_Safe_Stateful_Validator_As_Keyword</msg>
<msg time="2026-04-18T03:13:18.819632" level="INFO">${args} = [0, 0]</msg>
<msg time="2026-04-18T03:13:18.819678" level="INFO">${kwargs} = {'excluded_value': '0'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:13:18.819249" elapsed="0.000452"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>0</arg>
<arg>${arg1}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:13:18.819864" elapsed="0.000210"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>1</arg>
<arg>${arg2}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:13:18.820239" elapsed="0.000191"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Excluding_Stability_Safe_Stateful_Validator_As_Keyword" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:13:18.822410" level="INFO">${new_state} = 0</msg>
<var>${new_state}</var>
<arg>${data}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:13:18.822013" elapsed="0.000424"/>
</kw>
<if>
<branch type="IF" condition="${data} == ${excluded_value}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Got the excluded value.</value>
<status status="PASS" start="2026-04-18T03:13:18.822707" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-18T03:13:18.822508" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-04-18T03:13:18.822488" elapsed="0.000312"/>
</if>
<if>
<branch type="IF" condition="${data} != ${old_state}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Data value has changed.</value>
<status status="NOT RUN" start="2026-04-18T03:13:18.822890" elapsed="0.000152"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:13:18.822855" elapsed="0.000225"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:13:18.822839" elapsed="0.000264"/>
</if>
<return>
<value>${new_state}</value>
<value>PASS</value>
<value>Validated stable: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:13:18.823139" elapsed="0.000015"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Report failure if got the excluded value or if data value changed from last time. Useful to become validator.</doc>
<status status="PASS" start="2026-04-18T03:13:18.821566" elapsed="0.001695"/>
</kw>
<msg time="2026-04-18T03:13:18.823344" level="INFO">${result} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:13:18.820612" elapsed="0.002757"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:13:18.823417" elapsed="0.000027"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure with replaced first two positional arguments.</doc>
<status status="PASS" start="2026-04-18T03:13:18.818852" elapsed="0.004700"/>
</kw>
<msg time="2026-04-18T03:13:18.823646" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:13:18.823690" level="INFO">${message} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:13:18.818293" elapsed="0.005420"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:13:18.823878" elapsed="0.030169"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:13:18.855132" elapsed="0.000037"/>
</return>
<status status="PASS" start="2026-04-18T03:13:18.854994" elapsed="0.000211"/>
</branch>
<status status="PASS" start="2026-04-18T03:13:18.854967" elapsed="0.000263"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:13:18.855400" elapsed="0.000024"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with [0, 'FAIL', 'Got the excluded value.'].</doc>
<status status="PASS" start="2026-04-18T03:13:18.854506" elapsed="0.000980"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:13:18.855551" elapsed="0.000029"/>
</return>
<msg time="2026-04-18T03:13:18.855731" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:13:18.855779" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:13:18.855821" level="INFO">${result} = Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>ScalarClosures.Run_Closure_After_Replacing_First_Two_Arguments</arg>
<arg>${safe_validator}</arg>
<arg>${state}</arg>
<arg>${data}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:13:18.817827" elapsed="0.038018"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Validator failed: ${result}</value>
<status status="PASS" start="2026-04-18T03:13:18.856039" elapsed="0.000029"/>
</return>
<status status="PASS" start="2026-04-18T03:13:18.855929" elapsed="0.000181"/>
</branch>
<status status="PASS" start="2026-04-18T03:13:18.855911" elapsed="0.000224"/>
</if>
<if>
<branch type="IF" condition="${sleeps_left} &lt;= 0">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:13:18.856230" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:13:18.856192" elapsed="0.000084"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:13:18.856176" elapsed="0.000123"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-18T03:13:18.856460" elapsed="0.000023"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:13:18.856618" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:13:18.856581" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:13:18.856562" elapsed="0.000239"/>
</if>
<kw name="Sleep" owner="BuiltIn">
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-04-18T03:13:18.856972" elapsed="0.000023"/>
</kw>
<var name="${sleeps_left}">0</var>
<status status="PASS" start="2026-04-18T03:13:15.626311" elapsed="3.230720"/>
</iter>
<var>${sleeps_left}</var>
<value>${count}-1</value>
<value>-1</value>
<value>-1</value>
<status status="PASS" start="2026-04-18T03:13:15.625374" elapsed="3.231695"/>
</for>
<kw name="Fail" owner="BuiltIn">
<arg>Logic error, we should have returned before.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:13:18.857225" elapsed="0.000020"/>
</kw>
<msg time="2026-04-18T03:13:18.857448" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:13:18.857493" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:13:18.857551" level="INFO">${result} = Validator failed: Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>count=${count}</arg>
<arg>getter=${getter}</arg>
<arg>safe_validator=${safe_validator}</arg>
<arg>initial_state=${state}</arg>
<doc>Pass only if consecutively 1 times in a row with 60 between attempts: ${getter} creates data and ${safe_validator} passes. Validator updates its state even if it reports failure. Always return validator state, status and message.</doc>
<status status="PASS" start="2026-04-18T03:13:15.612761" elapsed="3.244816"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:13:18.857773" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:13:18.857665" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-18T03:13:18.857647" elapsed="0.000192"/>
</if>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:13:18.859270" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:13:18.859357" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:13:18.858973" elapsed="0.000457">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:13:18.859552" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:13:18.859599" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:13:18.858543" elapsed="0.001079"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:13:18.859809" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:13:18.859698" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-18T03:13:18.859680" elapsed="0.000196"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:13:18.860302" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:13:18.860030" elapsed="0.000300"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:13:18.863582" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:13:18.863667" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:13:18.860912" elapsed="0.002822">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:13:18.863843" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:13:18.863888" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:13:18.860498" elapsed="0.003414"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:13:18.864109" elapsed="0.000031"/>
</return>
<status status="PASS" start="2026-04-18T03:13:18.863994" elapsed="0.000184"/>
</branch>
<status status="PASS" start="2026-04-18T03:13:18.863973" elapsed="0.000229"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:13:18.864359" elapsed="0.000022"/>
</kw>
<arg>${result}</arg>
<arg>Not possible to succeed within the deadline.</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:13:18.858135" elapsed="0.006383"/>
</kw>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:13:18.865939" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:13:18.866015" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:13:18.865671" elapsed="0.000406">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:13:18.866180" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:13:18.866224" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:13:18.865296" elapsed="0.000952"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:13:18.866438" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:13:18.866325" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-04-18T03:13:18.866305" elapsed="0.000201"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:13:18.866935" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:13:18.866675" elapsed="0.000288"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:13:18.870091" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:13:18.870168" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:13:18.867473" elapsed="0.002806">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:13:18.870490" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:13:18.870551" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:13:18.867130" elapsed="0.003447"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:13:18.870771" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-18T03:13:18.870658" elapsed="0.000175"/>
</branch>
<status status="PASS" start="2026-04-18T03:13:18.870637" elapsed="0.000220"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:13:18.871013" elapsed="0.000023"/>
</kw>
<arg>${result}</arg>
<arg>Getter failed</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:13:18.864869" elapsed="0.006307"/>
</kw>
<kw name="Sleep" owner="BuiltIn">
<msg time="2026-04-18T03:14:18.872172" level="INFO">Slept 1 minute.</msg>
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="PASS" start="2026-04-18T03:13:18.871332" elapsed="60.001475"/>
</kw>
<var name="${try}">8</var>
<status status="PASS" start="2026-04-18T03:13:15.611031" elapsed="63.261957"/>
</iter>
<iter>
<kw name="Getter_And_Safe_Stateful_Validator_Have_To_Succeed_Consecutively_By_Deadline" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:14:18.877666" level="INFO">${result} = No result yet.</msg>
<var>${result}</var>
<arg>No result yet.</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:14:18.877117" elapsed="0.000588"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:14:18.878361" level="INFO">${state} = 0</msg>
<var>${state}</var>
<arg>${initial_state}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:14:18.877934" elapsed="0.000463"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:14:18.879184" level="INFO">${sleeps} = 0</msg>
<var>${sleeps}</var>
<arg>${count} - 1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:14:18.878656" elapsed="0.000566"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:14:18.881664" level="INFO">${date_now} = 2026-04-18 03:14:18.882</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:14:18.881387" elapsed="0.000317"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:14:18.882482" level="INFO">${time_deadline} = 475.024</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:14:18.881931" elapsed="0.000609"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:14:18.883349" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:14:18.882780" elapsed="0.000608"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:14:18.883886" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:14:18.883497" elapsed="0.000470"/>
</branch>
<status status="PASS" start="2026-04-18T03:14:18.883465" elapsed="0.000537"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:14:18.880140" elapsed="0.003931"/>
</kw>
<msg time="2026-04-18T03:14:18.884226" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:14:18.884292" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:14:18.879469" elapsed="0.004858"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:14:18.884862" elapsed="0.000024"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:14:18.884699" elapsed="0.000238"/>
</branch>
<status status="PASS" start="2026-04-18T03:14:18.884417" elapsed="0.000575"/>
</if>
<for flavor="IN RANGE">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_As_Is" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:14:18.887923" level="INFO">${keyword} = Get_Ipv4_Topology_Count</msg>
<msg time="2026-04-18T03:14:18.887972" level="INFO">${args} = []</msg>
<msg time="2026-04-18T03:14:18.888019" level="INFO">${kwargs} = {'session': 'operational', 'topology': 'example-ipv4-topology'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:14:18.887552" elapsed="0.000490"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Get_Ipv4_Topology_Count" owner="PrefixCounting">
<kw name="Get_Ipv4_Topology" owner="PrefixCounting">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:14:21.980390" level="INFO">GET Request : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01agv6blx930rdupfsp7wkuo902.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-18T03:14:21.994958" level="INFO">GET Response : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Transfer-Encoding': 'chunked'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xmlns="urn:opendaylight:params:xml:ns:yang:odl-bgp-topology-types"/&gt;&lt;/topology-types&gt;&lt;node&gt;&lt;node-id&gt;192.0.2.1&lt;/node-id&gt;&lt;igp-node-attributes xmlns="urn:TBD:params:xml:ns:yang:nt:l3-unicast-igp-topology"&gt;&lt;prefix&gt;&lt;prefix&gt;8.20.15.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.65.76.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.222.18.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.234.69.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.59.125.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.205.46.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.69.249.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.243.186.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.86.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.138.152.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.201.33.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.107.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.133.25.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.19.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.45.49.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.194.22.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.226.161.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.211.127.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.100.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.254.101.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.205.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.60.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.234.208.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.228.239.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.27.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.177.154.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.201.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.148.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.160.202.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.48.218.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.52.93.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.93.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.182.185.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.34.217.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.116.158.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.236.169.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.223.35.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.103.82.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.7.2.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.131.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.40.95.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.244.132.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.28.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.253.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.83.39.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.4.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.193.28.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.36.83.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.143.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.73.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.128.217.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.135.39.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.6.81.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.78.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.54.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.250.105.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.110.78.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.182.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.4.223.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.49.100.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.5.205.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.165.63.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.36.184.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.214.36.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.171.128.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.208.52.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.113.57.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.3.37.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.237.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.160.220.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.198.13.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.174.151.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.48.34.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.21.1.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.1.30.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.108.237.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.89.117.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.218.102.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.24.70.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.41.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.48.122.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.51.175.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.79.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.25.67.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.153.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.219.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.88.115.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.129.239.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.117.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.204.169.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.10.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.139.169.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.79.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.53.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.31.83.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.117.152.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.46.66.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.86.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.3.214.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.74.90.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.197.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.54.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.41.3.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.97.95.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.179.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.188.172.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.219.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.124.44.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.187.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.197.228.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.87.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.133.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.78.124.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.149.209.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.33.23.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.243.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.189.185.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.80.206.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.150.251.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.208.98.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.125.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.213.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.71.27.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.234.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.109.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.112.121.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.8.69.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.201.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.203.154.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.73.19.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.169.175.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.15.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.4.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.75.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.68.155.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.16.40.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.231.11.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.85.57.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.191.139.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.191.228.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.75.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.3.166.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.32.247.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.242.134.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.184.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.164.222.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.35.248.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.209.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.60.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.129.2.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.88.147.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.222.193.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.58.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.61.198.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.32.165.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.120.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.251.232.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.111.147.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.203.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.161.229.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.68.153.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.105.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.252.41.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.2.231.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.240.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.146.121.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.92.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.151.79.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.10.14.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.95.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.155.232.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.32.13.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.92.229.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.102.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.118.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.83.215.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.38.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.110.203.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.240.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.116.31.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.238.174.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.235.83.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.4.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.122.151.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.21.216.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.146.154.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.199.188.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.194.94.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.153.168.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.255.64.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.22.16/28&lt;/pref... (set the log level to DEBUG or TRACE to see the full content) 
 </msg>
<msg time="2026-04-18T03:14:21.998884" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${PC_NW_TOPOLOGY}=${topology}?content=nonconfig</arg>
<arg>expected_status=anything</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-18T03:14:18.890954" elapsed="3.108013"/>
</kw>
<if>
<branch type="IF" condition="${response.status_code} != 200">
<kw name="Fail" owner="BuiltIn">
<arg>Get on ${topology} returned status code ${response.status_code} with message: ${response.text}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:14:22.003074" elapsed="0.000038"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:14:21.999273" elapsed="0.003913"/>
</branch>
<status status="PASS" start="2026-04-18T03:14:21.999182" elapsed="0.004072"/>
</if>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-18T03:14:22.003392" elapsed="0.000106"/>
</return>
<msg time="2026-04-18T03:14:22.017089" level="INFO">${topology} = &lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xml...</msg>
<var>${topology}</var>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>GET the example-ipv4-topology data, check status is 200, return the topology data.</doc>
<status status="PASS" start="2026-04-18T03:14:18.889986" elapsed="3.127220"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:14:22.118229" level="INFO">${prefix_count} = 0</msg>
<var>${prefix_count}</var>
<arg>len(re.findall('"prefix":"', '''${topology}'''))</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:14:22.017606" elapsed="0.100725"/>
</kw>
<return>
<value>${prefix_count}</value>
<status status="PASS" start="2026-04-18T03:14:22.118454" elapsed="0.000057"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Get topology. If not fail, return number of prefixes in the topology.</doc>
<status status="PASS" start="2026-04-18T03:14:18.888752" elapsed="3.230069"/>
</kw>
<msg time="2026-04-18T03:14:22.118915" level="INFO">${result} = 0</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:14:18.888211" elapsed="3.230730"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:14:22.118992" elapsed="0.000028"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure without affecting arguments.</doc>
<status status="PASS" start="2026-04-18T03:14:18.887165" elapsed="3.231951"/>
</kw>
<msg time="2026-04-18T03:14:22.119213" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:14:22.119258" level="INFO">${message} = 0</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:14:18.886632" elapsed="3.232649"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:14:22.119503" elapsed="0.027849"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:14:22.148432" elapsed="0.000043"/>
</return>
<status status="PASS" start="2026-04-18T03:14:22.148284" elapsed="0.000235"/>
</branch>
<status status="PASS" start="2026-04-18T03:14:22.148258" elapsed="0.000315"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:14:22.148771" elapsed="0.000026"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with 0.</doc>
<status status="PASS" start="2026-04-18T03:14:22.147849" elapsed="0.001016"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:14:22.148912" elapsed="0.000028"/>
</return>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:14:18.886201" elapsed="3.262841"/>
</kw>
<msg time="2026-04-18T03:14:22.149149" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:14:22.149197" level="INFO">${data} = 0</msg>
<var>${status}</var>
<var>${data}</var>
<arg>ScalarClosures.Run_Keyword_And_Collect_Garbage</arg>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:14:18.885745" elapsed="3.263475"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Getter failed: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:14:22.149425" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:14:22.149304" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-04-18T03:14:22.149283" elapsed="0.000215"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:14:22.151242" level="INFO">${date_now} = 2026-04-18 03:14:22.151</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:14:22.151061" elapsed="0.000209"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:14:22.151830" level="INFO">${time_deadline} = 471.755</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:14:22.151425" elapsed="0.000431"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:14:22.152421" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:14:22.152021" elapsed="0.000427"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:14:22.152787" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:14:22.152520" elapsed="0.000321"/>
</branch>
<status status="PASS" start="2026-04-18T03:14:22.152500" elapsed="0.000366"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:14:22.150407" elapsed="0.002506"/>
</kw>
<msg time="2026-04-18T03:14:22.153013" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:14:22.153058" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:14:22.149741" elapsed="0.003341"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:14:22.153353" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:14:22.153245" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-18T03:14:22.153227" elapsed="0.000197"/>
</if>
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_After_Replacing_First_Two_Arguments" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:14:22.155464" level="INFO">${keyword} = WaitUtils.Excluding_Stability_Safe_Stateful_Validator_As_Keyword</msg>
<msg time="2026-04-18T03:14:22.155512" level="INFO">${args} = [0, 0]</msg>
<msg time="2026-04-18T03:14:22.155575" level="INFO">${kwargs} = {'excluded_value': '0'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:14:22.155156" elapsed="0.000442"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>0</arg>
<arg>${arg1}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:14:22.155762" elapsed="0.000211"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>1</arg>
<arg>${arg2}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:14:22.156131" elapsed="0.000189"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Excluding_Stability_Safe_Stateful_Validator_As_Keyword" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:14:22.158062" level="INFO">${new_state} = 0</msg>
<var>${new_state}</var>
<arg>${data}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:14:22.157656" elapsed="0.000432"/>
</kw>
<if>
<branch type="IF" condition="${data} == ${excluded_value}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Got the excluded value.</value>
<status status="PASS" start="2026-04-18T03:14:22.158377" elapsed="0.000031"/>
</return>
<status status="PASS" start="2026-04-18T03:14:22.158201" elapsed="0.000249"/>
</branch>
<status status="PASS" start="2026-04-18T03:14:22.158139" elapsed="0.000336"/>
</if>
<if>
<branch type="IF" condition="${data} != ${old_state}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Data value has changed.</value>
<status status="NOT RUN" start="2026-04-18T03:14:22.158585" elapsed="0.000163"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:14:22.158547" elapsed="0.000239"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:14:22.158515" elapsed="0.000293"/>
</if>
<return>
<value>${new_state}</value>
<value>PASS</value>
<value>Validated stable: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:14:22.158841" elapsed="0.000014"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Report failure if got the excluded value or if data value changed from last time. Useful to become validator.</doc>
<status status="PASS" start="2026-04-18T03:14:22.157182" elapsed="0.001779"/>
</kw>
<msg time="2026-04-18T03:14:22.159046" level="INFO">${result} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:14:22.156485" elapsed="0.002586"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:14:22.159119" elapsed="0.000027"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure with replaced first two positional arguments.</doc>
<status status="PASS" start="2026-04-18T03:14:22.154761" elapsed="0.004476"/>
</kw>
<msg time="2026-04-18T03:14:22.159329" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:14:22.159373" level="INFO">${message} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:14:22.154175" elapsed="0.005221"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:14:22.159577" elapsed="0.027433"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:14:22.188026" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-04-18T03:14:22.187892" elapsed="0.000203"/>
</branch>
<status status="PASS" start="2026-04-18T03:14:22.187869" elapsed="0.000251"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:14:22.188306" elapsed="0.000024"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with [0, 'FAIL', 'Got the excluded value.'].</doc>
<status status="PASS" start="2026-04-18T03:14:22.187462" elapsed="0.000928"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:14:22.188434" elapsed="0.000027"/>
</return>
<msg time="2026-04-18T03:14:22.188631" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:14:22.188677" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:14:22.188718" level="INFO">${result} = Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>ScalarClosures.Run_Closure_After_Replacing_First_Two_Arguments</arg>
<arg>${safe_validator}</arg>
<arg>${state}</arg>
<arg>${data}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:14:22.153685" elapsed="0.035056"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Validator failed: ${result}</value>
<status status="PASS" start="2026-04-18T03:14:22.188947" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-04-18T03:14:22.188822" elapsed="0.000188"/>
</branch>
<status status="PASS" start="2026-04-18T03:14:22.188805" elapsed="0.000229"/>
</if>
<if>
<branch type="IF" condition="${sleeps_left} &lt;= 0">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:14:22.189125" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:14:22.189089" elapsed="0.000080"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:14:22.189073" elapsed="0.000119"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-18T03:14:22.189350" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:14:22.189490" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:14:22.189455" elapsed="0.000167"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:14:22.189438" elapsed="0.000210"/>
</if>
<kw name="Sleep" owner="BuiltIn">
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-04-18T03:14:22.189793" elapsed="0.000021"/>
</kw>
<var name="${sleeps_left}">0</var>
<status status="PASS" start="2026-04-18T03:14:18.885585" elapsed="3.304264"/>
</iter>
<var>${sleeps_left}</var>
<value>${count}-1</value>
<value>-1</value>
<value>-1</value>
<status status="PASS" start="2026-04-18T03:14:18.885099" elapsed="3.304787"/>
</for>
<kw name="Fail" owner="BuiltIn">
<arg>Logic error, we should have returned before.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:14:22.190041" elapsed="0.000021"/>
</kw>
<msg time="2026-04-18T03:14:22.190312" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:14:22.190357" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:14:22.190397" level="INFO">${result} = Validator failed: Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>count=${count}</arg>
<arg>getter=${getter}</arg>
<arg>safe_validator=${safe_validator}</arg>
<arg>initial_state=${state}</arg>
<doc>Pass only if consecutively 1 times in a row with 60 between attempts: ${getter} creates data and ${safe_validator} passes. Validator updates its state even if it reports failure. Always return validator state, status and message.</doc>
<status status="PASS" start="2026-04-18T03:14:18.875159" elapsed="3.315261"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:14:22.190634" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:14:22.190507" elapsed="0.000172"/>
</branch>
<status status="PASS" start="2026-04-18T03:14:22.190489" elapsed="0.000212"/>
</if>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:14:22.192041" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:14:22.192128" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:14:22.191756" elapsed="0.000443">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:14:22.192301" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:14:22.192343" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:14:22.191346" elapsed="0.001020"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:14:22.192561" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:14:22.192439" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-04-18T03:14:22.192420" elapsed="0.000209"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:14:22.193035" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:14:22.192781" elapsed="0.000280"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:14:22.196205" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:14:22.196280" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:14:22.193576" elapsed="0.002763">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:14:22.196442" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:14:22.196484" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:14:22.193225" elapsed="0.003282"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:14:22.196708" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-04-18T03:14:22.196600" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-04-18T03:14:22.196581" elapsed="0.000209"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:14:22.196945" elapsed="0.000022"/>
</kw>
<arg>${result}</arg>
<arg>Not possible to succeed within the deadline.</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:14:22.190969" elapsed="0.006127"/>
</kw>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:14:22.198434" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:14:22.198508" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:14:22.198111" elapsed="0.000472">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:14:22.198685" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:14:22.198727" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:14:22.197770" elapsed="0.000979"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:14:22.198931" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:14:22.198823" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-18T03:14:22.198804" elapsed="0.000194"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:14:22.199408" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:14:22.199155" elapsed="0.000280"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:14:22.202449" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:14:22.202537" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:14:22.199998" elapsed="0.002601">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:14:22.202750" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:14:22.202795" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:14:22.199625" elapsed="0.003192"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:14:22.203001" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-18T03:14:22.202892" elapsed="0.000169"/>
</branch>
<status status="PASS" start="2026-04-18T03:14:22.202873" elapsed="0.000212"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:14:22.203236" elapsed="0.000021"/>
</kw>
<arg>${result}</arg>
<arg>Getter failed</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:14:22.197380" elapsed="0.006009"/>
</kw>
<kw name="Sleep" owner="BuiltIn">
<msg time="2026-04-18T03:15:22.204329" level="INFO">Slept 1 minute.</msg>
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="PASS" start="2026-04-18T03:14:22.203559" elapsed="60.001328"/>
</kw>
<var name="${try}">9</var>
<status status="PASS" start="2026-04-18T03:14:18.873615" elapsed="63.331433"/>
</iter>
<iter>
<kw name="Getter_And_Safe_Stateful_Validator_Have_To_Succeed_Consecutively_By_Deadline" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:15:22.209770" level="INFO">${result} = No result yet.</msg>
<var>${result}</var>
<arg>No result yet.</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:15:22.209021" elapsed="0.000839"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:15:22.211100" level="INFO">${state} = 0</msg>
<var>${state}</var>
<arg>${initial_state}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:15:22.210305" elapsed="0.000860"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:15:22.212377" level="INFO">${sleeps} = 0</msg>
<var>${sleeps}</var>
<arg>${count} - 1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:15:22.211565" elapsed="0.000872"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:15:22.215753" level="INFO">${date_now} = 2026-04-18 03:15:22.216</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:15:22.215472" elapsed="0.000322"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:15:22.216632" level="INFO">${time_deadline} = 411.69</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:15:22.216030" elapsed="0.000646"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:15:22.217580" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:15:22.216928" elapsed="0.000694"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:15:22.218158" elapsed="0.000039"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:15:22.217740" elapsed="0.000512"/>
</branch>
<status status="PASS" start="2026-04-18T03:15:22.217706" elapsed="0.000586"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:15:22.213988" elapsed="0.004381"/>
</kw>
<msg time="2026-04-18T03:15:22.218522" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:15:22.218622" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:15:22.212849" elapsed="0.005808"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:15:22.218941" elapsed="0.000024"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:15:22.218778" elapsed="0.000240"/>
</branch>
<status status="PASS" start="2026-04-18T03:15:22.218752" elapsed="0.000297"/>
</if>
<for flavor="IN RANGE">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_As_Is" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:15:22.223117" level="INFO">${keyword} = Get_Ipv4_Topology_Count</msg>
<msg time="2026-04-18T03:15:22.223167" level="INFO">${args} = []</msg>
<msg time="2026-04-18T03:15:22.223215" level="INFO">${kwargs} = {'session': 'operational', 'topology': 'example-ipv4-topology'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:15:22.222746" elapsed="0.000493"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Get_Ipv4_Topology_Count" owner="PrefixCounting">
<kw name="Get_Ipv4_Topology" owner="PrefixCounting">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:15:25.338274" level="INFO">GET Request : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01agv6blx930rdupfsp7wkuo902.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-18T03:15:25.350120" level="INFO">GET Response : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Transfer-Encoding': 'chunked'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xmlns="urn:opendaylight:params:xml:ns:yang:odl-bgp-topology-types"/&gt;&lt;/topology-types&gt;&lt;node&gt;&lt;node-id&gt;192.0.2.1&lt;/node-id&gt;&lt;igp-node-attributes xmlns="urn:TBD:params:xml:ns:yang:nt:l3-unicast-igp-topology"&gt;&lt;prefix&gt;&lt;prefix&gt;8.20.15.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.65.76.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.222.18.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.234.69.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.59.125.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.205.46.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.69.249.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.243.186.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.86.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.138.152.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.201.33.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.107.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.133.25.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.19.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.45.49.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.194.22.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.226.161.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.211.127.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.100.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.254.101.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.205.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.60.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.234.208.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.228.239.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.27.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.177.154.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.201.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.148.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.160.202.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.48.218.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.52.93.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.93.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.182.185.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.34.217.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.116.158.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.236.169.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.223.35.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.103.82.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.7.2.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.131.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.40.95.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.244.132.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.28.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.253.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.83.39.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.4.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.193.28.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.36.83.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.143.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.73.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.128.217.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.135.39.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.6.81.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.78.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.54.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.250.105.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.110.78.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.182.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.4.223.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.49.100.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.5.205.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.165.63.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.36.184.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.214.36.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.171.128.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.208.52.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.113.57.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.3.37.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.237.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.160.220.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.198.13.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.174.151.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.48.34.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.21.1.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.1.30.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.108.237.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.89.117.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.218.102.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.24.70.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.41.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.48.122.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.51.175.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.79.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.25.67.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.153.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.219.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.88.115.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.129.239.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.117.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.204.169.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.10.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.139.169.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.79.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.53.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.31.83.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.117.152.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.46.66.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.86.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.3.214.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.74.90.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.197.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.54.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.41.3.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.97.95.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.179.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.188.172.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.219.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.124.44.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.187.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.197.228.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.87.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.133.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.78.124.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.149.209.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.33.23.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.243.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.189.185.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.80.206.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.150.251.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.208.98.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.125.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.213.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.71.27.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.234.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.109.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.112.121.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.8.69.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.201.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.203.154.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.73.19.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.169.175.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.15.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.4.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.75.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.68.155.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.16.40.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.231.11.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.85.57.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.191.139.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.191.228.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.75.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.3.166.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.32.247.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.242.134.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.184.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.164.222.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.35.248.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.209.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.60.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.129.2.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.88.147.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.222.193.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.58.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.61.198.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.32.165.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.120.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.251.232.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.111.147.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.203.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.161.229.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.68.153.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.105.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.252.41.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.2.231.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.240.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.146.121.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.92.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.151.79.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.10.14.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.95.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.155.232.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.32.13.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.92.229.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.102.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.118.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.83.215.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.38.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.110.203.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.240.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.116.31.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.238.174.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.235.83.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.4.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.122.151.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.21.216.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.146.154.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.199.188.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.194.94.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.153.168.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.255.64.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.22.16/28&lt;/pref... (set the log level to DEBUG or TRACE to see the full content) 
 </msg>
<msg time="2026-04-18T03:15:25.350761" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${PC_NW_TOPOLOGY}=${topology}?content=nonconfig</arg>
<arg>expected_status=anything</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-18T03:15:22.226289" elapsed="3.124532"/>
</kw>
<if>
<branch type="IF" condition="${response.status_code} != 200">
<kw name="Fail" owner="BuiltIn">
<arg>Get on ${topology} returned status code ${response.status_code} with message: ${response.text}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:15:25.353898" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:15:25.351058" elapsed="0.002922"/>
</branch>
<status status="PASS" start="2026-04-18T03:15:25.350988" elapsed="0.003038"/>
</if>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-18T03:15:25.354125" elapsed="0.000077"/>
</return>
<msg time="2026-04-18T03:15:25.361476" level="INFO">${topology} = &lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xml...</msg>
<var>${topology}</var>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>GET the example-ipv4-topology data, check status is 200, return the topology data.</doc>
<status status="PASS" start="2026-04-18T03:15:22.225272" elapsed="3.136381"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:15:25.453042" level="INFO">${prefix_count} = 0</msg>
<var>${prefix_count}</var>
<arg>len(re.findall('"prefix":"', '''${topology}'''))</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:15:25.362018" elapsed="0.091128"/>
</kw>
<return>
<value>${prefix_count}</value>
<status status="PASS" start="2026-04-18T03:15:25.453276" elapsed="0.000061"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Get topology. If not fail, return number of prefixes in the topology.</doc>
<status status="PASS" start="2026-04-18T03:15:22.223950" elapsed="3.229687"/>
</kw>
<msg time="2026-04-18T03:15:25.453738" level="INFO">${result} = 0</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:15:22.223410" elapsed="3.230354"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:15:25.453843" elapsed="0.000033"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure without affecting arguments.</doc>
<status status="PASS" start="2026-04-18T03:15:22.222209" elapsed="3.231769"/>
</kw>
<msg time="2026-04-18T03:15:25.454076" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:15:25.454119" level="INFO">${message} = 0</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:15:22.221322" elapsed="3.232821"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:15:25.454373" elapsed="0.026759"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:15:25.482289" elapsed="0.000038"/>
</return>
<status status="PASS" start="2026-04-18T03:15:25.482032" elapsed="0.000331"/>
</branch>
<status status="PASS" start="2026-04-18T03:15:25.482007" elapsed="0.000380"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:15:25.482574" elapsed="0.000024"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with 0.</doc>
<status status="PASS" start="2026-04-18T03:15:25.481590" elapsed="0.001069"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:15:25.482704" elapsed="0.000027"/>
</return>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:15:22.220713" elapsed="3.262116"/>
</kw>
<msg time="2026-04-18T03:15:25.482928" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:15:25.482975" level="INFO">${data} = 0</msg>
<var>${status}</var>
<var>${data}</var>
<arg>ScalarClosures.Run_Keyword_And_Collect_Garbage</arg>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:15:22.219975" elapsed="3.263023"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Getter failed: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:15:25.483185" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:15:25.483076" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-04-18T03:15:25.483057" elapsed="0.000198"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:15:25.484809" level="INFO">${date_now} = 2026-04-18 03:15:25.485</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:15:25.484627" elapsed="0.000211"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:15:25.485374" level="INFO">${time_deadline} = 408.421</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:15:25.484993" elapsed="0.000422"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:15:25.486037" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:15:25.485625" elapsed="0.000440"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:15:25.486391" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:15:25.486139" elapsed="0.000308"/>
</branch>
<status status="PASS" start="2026-04-18T03:15:25.486119" elapsed="0.000352"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:15:25.483976" elapsed="0.002561"/>
</kw>
<msg time="2026-04-18T03:15:25.486643" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:15:25.486691" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:15:25.483418" elapsed="0.003297"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:15:25.486987" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:15:25.486878" elapsed="0.000160"/>
</branch>
<status status="PASS" start="2026-04-18T03:15:25.486859" elapsed="0.000201"/>
</if>
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_After_Replacing_First_Two_Arguments" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:15:25.489360" level="INFO">${keyword} = WaitUtils.Excluding_Stability_Safe_Stateful_Validator_As_Keyword</msg>
<msg time="2026-04-18T03:15:25.489419" level="INFO">${args} = [0, 0]</msg>
<msg time="2026-04-18T03:15:25.489478" level="INFO">${kwargs} = {'excluded_value': '0'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:15:25.488977" elapsed="0.000531"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>0</arg>
<arg>${arg1}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:15:25.489753" elapsed="0.000240"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>1</arg>
<arg>${arg2}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:15:25.490158" elapsed="0.000194"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Excluding_Stability_Safe_Stateful_Validator_As_Keyword" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:15:25.492159" level="INFO">${new_state} = 0</msg>
<var>${new_state}</var>
<arg>${data}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:15:25.491733" elapsed="0.000453"/>
</kw>
<if>
<branch type="IF" condition="${data} == ${excluded_value}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Got the excluded value.</value>
<status status="PASS" start="2026-04-18T03:15:25.492430" elapsed="0.000030"/>
</return>
<status status="PASS" start="2026-04-18T03:15:25.492258" elapsed="0.000242"/>
</branch>
<status status="PASS" start="2026-04-18T03:15:25.492239" elapsed="0.000303"/>
</if>
<if>
<branch type="IF" condition="${data} != ${old_state}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Data value has changed.</value>
<status status="NOT RUN" start="2026-04-18T03:15:25.492634" elapsed="0.000159"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:15:25.492600" elapsed="0.000230"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:15:25.492584" elapsed="0.000268"/>
</if>
<return>
<value>${new_state}</value>
<value>PASS</value>
<value>Validated stable: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:15:25.492885" elapsed="0.000014"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Report failure if got the excluded value or if data value changed from last time. Useful to become validator.</doc>
<status status="PASS" start="2026-04-18T03:15:25.491234" elapsed="0.001771"/>
</kw>
<msg time="2026-04-18T03:15:25.493088" level="INFO">${result} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:15:25.490520" elapsed="0.002593"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:15:25.493162" elapsed="0.000027"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure with replaced first two positional arguments.</doc>
<status status="PASS" start="2026-04-18T03:15:25.488494" elapsed="0.004787"/>
</kw>
<msg time="2026-04-18T03:15:25.493374" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:15:25.493418" level="INFO">${message} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:15:25.487852" elapsed="0.005589"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:15:25.493625" elapsed="0.027419"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:15:25.522049" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-04-18T03:15:25.521914" elapsed="0.000203"/>
</branch>
<status status="PASS" start="2026-04-18T03:15:25.521890" elapsed="0.000253"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:15:25.522307" elapsed="0.000024"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with [0, 'FAIL', 'Got the excluded value.'].</doc>
<status status="PASS" start="2026-04-18T03:15:25.521480" elapsed="0.000911"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:15:25.522438" elapsed="0.000027"/>
</return>
<msg time="2026-04-18T03:15:25.522628" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:15:25.522675" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:15:25.522725" level="INFO">${result} = Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>ScalarClosures.Run_Closure_After_Replacing_First_Two_Arguments</arg>
<arg>${safe_validator}</arg>
<arg>${state}</arg>
<arg>${data}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:15:25.487291" elapsed="0.035462"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Validator failed: ${result}</value>
<status status="PASS" start="2026-04-18T03:15:25.522948" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-04-18T03:15:25.522838" elapsed="0.000174"/>
</branch>
<status status="PASS" start="2026-04-18T03:15:25.522820" elapsed="0.000216"/>
</if>
<if>
<branch type="IF" condition="${sleeps_left} &lt;= 0">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:15:25.523128" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:15:25.523092" elapsed="0.000082"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:15:25.523076" elapsed="0.000121"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-18T03:15:25.523356" elapsed="0.000023"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:15:25.523494" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:15:25.523458" elapsed="0.000203"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:15:25.523441" elapsed="0.000251"/>
</if>
<kw name="Sleep" owner="BuiltIn">
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-04-18T03:15:25.523899" elapsed="0.000024"/>
</kw>
<var name="${sleeps_left}">0</var>
<status status="PASS" start="2026-04-18T03:15:22.219747" elapsed="3.304213"/>
</iter>
<var>${sleeps_left}</var>
<value>${count}-1</value>
<value>-1</value>
<value>-1</value>
<status status="PASS" start="2026-04-18T03:15:22.219111" elapsed="3.304885"/>
</for>
<kw name="Fail" owner="BuiltIn">
<arg>Logic error, we should have returned before.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:15:25.524154" elapsed="0.000020"/>
</kw>
<msg time="2026-04-18T03:15:25.524379" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:15:25.524424" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:15:25.524464" level="INFO">${result} = Validator failed: Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>count=${count}</arg>
<arg>getter=${getter}</arg>
<arg>safe_validator=${safe_validator}</arg>
<arg>initial_state=${state}</arg>
<doc>Pass only if consecutively 1 times in a row with 60 between attempts: ${getter} creates data and ${safe_validator} passes. Validator updates its state even if it reports failure. Always return validator state, status and message.</doc>
<status status="PASS" start="2026-04-18T03:15:22.207194" elapsed="3.317294"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:15:25.524702" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:15:25.524594" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-04-18T03:15:25.524575" elapsed="0.000192"/>
</if>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:15:25.526266" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:15:25.526348" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:15:25.525824" elapsed="0.000594">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:15:25.526519" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:15:25.526580" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:15:25.525417" elapsed="0.001186"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:15:25.526791" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:15:25.526681" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-18T03:15:25.526661" elapsed="0.000197"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:15:25.527280" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:15:25.527011" elapsed="0.000297"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:15:25.530563" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:15:25.530640" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:15:25.527945" elapsed="0.002755">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:15:25.530802" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:15:25.530844" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:15:25.527476" elapsed="0.003391"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:15:25.531174" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-18T03:15:25.530942" elapsed="0.000293"/>
</branch>
<status status="PASS" start="2026-04-18T03:15:25.530923" elapsed="0.000335"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:15:25.531407" elapsed="0.000022"/>
</kw>
<arg>${result}</arg>
<arg>Not possible to succeed within the deadline.</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:15:25.525036" elapsed="0.006579"/>
</kw>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:15:25.532920" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:15:25.532994" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:15:25.532661" elapsed="0.000392">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:15:25.533152" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:15:25.533195" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:15:25.532304" elapsed="0.000913"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:15:25.533399" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:15:25.533291" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-18T03:15:25.533273" elapsed="0.000193"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:15:25.533888" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:15:25.533638" elapsed="0.000276"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:15:25.536876" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:15:25.536950" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:15:25.534413" elapsed="0.002596">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:15:25.537151" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:15:25.537196" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:15:25.534081" elapsed="0.003137"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:15:25.537403" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-04-18T03:15:25.537293" elapsed="0.000169"/>
</branch>
<status status="PASS" start="2026-04-18T03:15:25.537274" elapsed="0.000212"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:15:25.537651" elapsed="0.000022"/>
</kw>
<arg>${result}</arg>
<arg>Getter failed</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:15:25.531926" elapsed="0.005883"/>
</kw>
<kw name="Sleep" owner="BuiltIn">
<msg time="2026-04-18T03:16:25.538738" level="INFO">Slept 1 minute.</msg>
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="PASS" start="2026-04-18T03:15:25.537994" elapsed="60.001249"/>
</kw>
<var name="${try}">10</var>
<status status="PASS" start="2026-04-18T03:15:22.205669" elapsed="63.333751"/>
</iter>
<iter>
<kw name="Getter_And_Safe_Stateful_Validator_Have_To_Succeed_Consecutively_By_Deadline" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:16:25.544424" level="INFO">${result} = No result yet.</msg>
<var>${result}</var>
<arg>No result yet.</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:16:25.543643" elapsed="0.000846"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:16:25.545775" level="INFO">${state} = 0</msg>
<var>${state}</var>
<arg>${initial_state}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:16:25.544941" elapsed="0.000896"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:16:25.546507" level="INFO">${sleeps} = 0</msg>
<var>${sleeps}</var>
<arg>${count} - 1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:16:25.546106" elapsed="0.000447"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:16:25.548371" level="INFO">${date_now} = 2026-04-18 03:16:25.548</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:16:25.548161" elapsed="0.000242"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:16:25.549068" level="INFO">${time_deadline} = 348.358</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:16:25.548605" elapsed="0.000497"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:16:25.549817" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:16:25.549371" elapsed="0.000473"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:16:25.550183" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:16:25.549923" elapsed="0.000317"/>
</branch>
<status status="PASS" start="2026-04-18T03:16:25.549900" elapsed="0.000366"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:16:25.547290" elapsed="0.003035"/>
</kw>
<msg time="2026-04-18T03:16:25.550431" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:16:25.550476" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:16:25.546732" elapsed="0.003767"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:16:25.550711" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:16:25.550600" elapsed="0.000164"/>
</branch>
<status status="PASS" start="2026-04-18T03:16:25.550582" elapsed="0.000204"/>
</if>
<for flavor="IN RANGE">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_As_Is" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:16:25.553730" level="INFO">${keyword} = Get_Ipv4_Topology_Count</msg>
<msg time="2026-04-18T03:16:25.553779" level="INFO">${args} = []</msg>
<msg time="2026-04-18T03:16:25.553827" level="INFO">${kwargs} = {'session': 'operational', 'topology': 'example-ipv4-topology'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:16:25.553303" elapsed="0.000548"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Get_Ipv4_Topology_Count" owner="PrefixCounting">
<kw name="Get_Ipv4_Topology" owner="PrefixCounting">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:16:28.618823" level="INFO">GET Request : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01agv6blx930rdupfsp7wkuo902.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-18T03:16:28.634409" level="INFO">GET Response : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Transfer-Encoding': 'chunked'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xmlns="urn:opendaylight:params:xml:ns:yang:odl-bgp-topology-types"/&gt;&lt;/topology-types&gt;&lt;node&gt;&lt;node-id&gt;192.0.2.1&lt;/node-id&gt;&lt;igp-node-attributes xmlns="urn:TBD:params:xml:ns:yang:nt:l3-unicast-igp-topology"&gt;&lt;prefix&gt;&lt;prefix&gt;8.20.15.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.65.76.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.222.18.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.234.69.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.59.125.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.205.46.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.69.249.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.243.186.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.86.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.138.152.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.201.33.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.107.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.133.25.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.19.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.45.49.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.194.22.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.226.161.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.211.127.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.100.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.254.101.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.205.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.60.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.234.208.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.228.239.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.27.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.177.154.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.201.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.148.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.160.202.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.48.218.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.52.93.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.93.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.182.185.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.34.217.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.116.158.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.236.169.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.223.35.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.103.82.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.7.2.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.131.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.40.95.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.244.132.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.28.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.253.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.83.39.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.4.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.193.28.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.36.83.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.143.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.73.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.128.217.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.135.39.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.6.81.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.78.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.54.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.250.105.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.110.78.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.182.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.4.223.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.49.100.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.5.205.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.165.63.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.36.184.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.214.36.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.171.128.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.208.52.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.113.57.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.3.37.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.237.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.160.220.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.198.13.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.174.151.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.48.34.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.21.1.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.1.30.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.108.237.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.89.117.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.218.102.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.24.70.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.41.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.48.122.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.51.175.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.79.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.25.67.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.153.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.219.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.88.115.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.129.239.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.117.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.204.169.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.10.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.139.169.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.79.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.53.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.31.83.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.117.152.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.46.66.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.86.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.3.214.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.74.90.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.197.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.54.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.41.3.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.97.95.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.179.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.188.172.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.219.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.124.44.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.187.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.197.228.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.87.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.133.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.78.124.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.149.209.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.33.23.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.243.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.189.185.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.80.206.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.150.251.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.208.98.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.125.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.213.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.71.27.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.234.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.109.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.112.121.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.8.69.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.201.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.203.154.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.73.19.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.169.175.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.15.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.4.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.75.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.68.155.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.16.40.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.231.11.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.85.57.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.191.139.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.191.228.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.75.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.3.166.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.32.247.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.242.134.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.184.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.164.222.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.35.248.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.209.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.60.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.129.2.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.88.147.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.222.193.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.58.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.61.198.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.32.165.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.120.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.251.232.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.111.147.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.203.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.161.229.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.68.153.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.105.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.252.41.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.2.231.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.240.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.146.121.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.92.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.151.79.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.10.14.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.95.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.155.232.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.32.13.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.92.229.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.102.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.118.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.83.215.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.38.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.110.203.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.240.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.116.31.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.238.174.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.235.83.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.4.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.122.151.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.21.216.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.146.154.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.199.188.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.194.94.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.153.168.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.255.64.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.22.16/28&lt;/pref... (set the log level to DEBUG or TRACE to see the full content) 
 </msg>
<msg time="2026-04-18T03:16:28.637395" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${PC_NW_TOPOLOGY}=${topology}?content=nonconfig</arg>
<arg>expected_status=anything</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-18T03:16:25.556803" elapsed="3.080656"/>
</kw>
<if>
<branch type="IF" condition="${response.status_code} != 200">
<kw name="Fail" owner="BuiltIn">
<arg>Get on ${topology} returned status code ${response.status_code} with message: ${response.text}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:16:28.641035" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:16:28.637791" elapsed="0.003353"/>
</branch>
<status status="PASS" start="2026-04-18T03:16:28.637702" elapsed="0.003498"/>
</if>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-18T03:16:28.641309" elapsed="0.000096"/>
</return>
<msg time="2026-04-18T03:16:28.656264" level="INFO">${topology} = &lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xml...</msg>
<var>${topology}</var>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>GET the example-ipv4-topology data, check status is 200, return the topology data.</doc>
<status status="PASS" start="2026-04-18T03:16:25.555811" elapsed="3.100586"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:16:28.769574" level="INFO">${prefix_count} = 0</msg>
<var>${prefix_count}</var>
<arg>len(re.findall('"prefix":"', '''${topology}'''))</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:16:28.656877" elapsed="0.112812"/>
</kw>
<return>
<value>${prefix_count}</value>
<status status="PASS" start="2026-04-18T03:16:28.769824" elapsed="0.000061"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Get topology. If not fail, return number of prefixes in the topology.</doc>
<status status="PASS" start="2026-04-18T03:16:25.554545" elapsed="3.215628"/>
</kw>
<msg time="2026-04-18T03:16:28.770271" level="INFO">${result} = 0</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:16:25.554027" elapsed="3.216270"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:16:28.770351" elapsed="0.000029"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure without affecting arguments.</doc>
<status status="PASS" start="2026-04-18T03:16:25.552858" elapsed="3.217623"/>
</kw>
<msg time="2026-04-18T03:16:28.770604" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:16:28.770650" level="INFO">${message} = 0</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:16:25.552289" elapsed="3.218386"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:16:28.770903" elapsed="0.034477"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:16:28.806483" elapsed="0.000038"/>
</return>
<status status="PASS" start="2026-04-18T03:16:28.806343" elapsed="0.000232"/>
</branch>
<status status="PASS" start="2026-04-18T03:16:28.806317" elapsed="0.000285"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:16:28.806774" elapsed="0.000024"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with 0.</doc>
<status status="PASS" start="2026-04-18T03:16:28.805898" elapsed="0.000962"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:16:28.806906" elapsed="0.000028"/>
</return>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:16:25.551874" elapsed="3.255161"/>
</kw>
<msg time="2026-04-18T03:16:28.807136" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:16:28.807184" level="INFO">${data} = 0</msg>
<var>${status}</var>
<var>${data}</var>
<arg>ScalarClosures.Run_Keyword_And_Collect_Garbage</arg>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:16:25.551402" elapsed="3.255805"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Getter failed: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:16:28.807394" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:16:28.807286" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-04-18T03:16:28.807267" elapsed="0.000200"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:16:28.808986" level="INFO">${date_now} = 2026-04-18 03:16:28.809</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:16:28.808806" elapsed="0.000209"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:16:28.809660" level="INFO">${time_deadline} = 345.097</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:16:28.809202" elapsed="0.000493"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:16:28.810430" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:16:28.809922" elapsed="0.000547"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:16:28.810898" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:16:28.810587" elapsed="0.000387"/>
</branch>
<status status="PASS" start="2026-04-18T03:16:28.810559" elapsed="0.000450"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:16:28.808183" elapsed="0.002895"/>
</kw>
<msg time="2026-04-18T03:16:28.811224" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:16:28.811286" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:16:28.807664" elapsed="0.003651"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:16:28.811779" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:16:28.811587" elapsed="0.000247"/>
</branch>
<status status="PASS" start="2026-04-18T03:16:28.811560" elapsed="0.000296"/>
</if>
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_After_Replacing_First_Two_Arguments" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:16:28.814056" level="INFO">${keyword} = WaitUtils.Excluding_Stability_Safe_Stateful_Validator_As_Keyword</msg>
<msg time="2026-04-18T03:16:28.814106" level="INFO">${args} = [0, 0]</msg>
<msg time="2026-04-18T03:16:28.814153" level="INFO">${kwargs} = {'excluded_value': '0'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:16:28.813735" elapsed="0.000441"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>0</arg>
<arg>${arg1}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:16:28.814344" elapsed="0.000238"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>1</arg>
<arg>${arg2}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:16:28.814748" elapsed="0.000246"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Excluding_Stability_Safe_Stateful_Validator_As_Keyword" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:16:28.816875" level="INFO">${new_state} = 0</msg>
<var>${new_state}</var>
<arg>${data}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:16:28.816384" elapsed="0.000520"/>
</kw>
<if>
<branch type="IF" condition="${data} == ${excluded_value}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Got the excluded value.</value>
<status status="PASS" start="2026-04-18T03:16:28.817164" elapsed="0.000037"/>
</return>
<status status="PASS" start="2026-04-18T03:16:28.816981" elapsed="0.000264"/>
</branch>
<status status="PASS" start="2026-04-18T03:16:28.816959" elapsed="0.000312"/>
</if>
<if>
<branch type="IF" condition="${data} != ${old_state}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Data value has changed.</value>
<status status="NOT RUN" start="2026-04-18T03:16:28.817365" elapsed="0.000232"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:16:28.817329" elapsed="0.000313"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:16:28.817313" elapsed="0.000361"/>
</if>
<return>
<value>${new_state}</value>
<value>PASS</value>
<value>Validated stable: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:16:28.817717" elapsed="0.000016"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Report failure if got the excluded value or if data value changed from last time. Useful to become validator.</doc>
<status status="PASS" start="2026-04-18T03:16:28.815917" elapsed="0.001929"/>
</kw>
<msg time="2026-04-18T03:16:28.817935" level="INFO">${result} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:16:28.815170" elapsed="0.002790"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:16:28.818010" elapsed="0.000028"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure with replaced first two positional arguments.</doc>
<status status="PASS" start="2026-04-18T03:16:28.813292" elapsed="0.004840"/>
</kw>
<msg time="2026-04-18T03:16:28.818227" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:16:28.818272" level="INFO">${message} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:16:28.812624" elapsed="0.005672"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:16:28.818466" elapsed="0.035473"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:16:28.855042" elapsed="0.000037"/>
</return>
<status status="PASS" start="2026-04-18T03:16:28.854907" elapsed="0.000209"/>
</branch>
<status status="PASS" start="2026-04-18T03:16:28.854881" elapsed="0.000259"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:16:28.855341" elapsed="0.000028"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with [0, 'FAIL', 'Got the excluded value.'].</doc>
<status status="PASS" start="2026-04-18T03:16:28.854447" elapsed="0.000989"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:16:28.855482" elapsed="0.000029"/>
</return>
<msg time="2026-04-18T03:16:28.855690" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:16:28.855738" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:16:28.855779" level="INFO">${result} = Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>ScalarClosures.Run_Closure_After_Replacing_First_Two_Arguments</arg>
<arg>${safe_validator}</arg>
<arg>${state}</arg>
<arg>${data}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:16:28.812093" elapsed="0.043740"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Validator failed: ${result}</value>
<status status="PASS" start="2026-04-18T03:16:28.856036" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-04-18T03:16:28.855925" elapsed="0.000175"/>
</branch>
<status status="PASS" start="2026-04-18T03:16:28.855906" elapsed="0.000217"/>
</if>
<if>
<branch type="IF" condition="${sleeps_left} &lt;= 0">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:16:28.856214" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:16:28.856177" elapsed="0.000083"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:16:28.856162" elapsed="0.000126"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-18T03:16:28.856465" elapsed="0.000023"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:16:28.856622" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:16:28.856586" elapsed="0.000160"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:16:28.856568" elapsed="0.000204"/>
</if>
<kw name="Sleep" owner="BuiltIn">
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-04-18T03:16:28.856917" elapsed="0.000022"/>
</kw>
<var name="${sleeps_left}">0</var>
<status status="PASS" start="2026-04-18T03:16:25.551238" elapsed="3.305736"/>
</iter>
<var>${sleeps_left}</var>
<value>${count}-1</value>
<value>-1</value>
<value>-1</value>
<status status="PASS" start="2026-04-18T03:16:25.550827" elapsed="3.306185"/>
</for>
<kw name="Fail" owner="BuiltIn">
<arg>Logic error, we should have returned before.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:16:28.857171" elapsed="0.000022"/>
</kw>
<msg time="2026-04-18T03:16:28.857421" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:16:28.857467" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:16:28.857510" level="INFO">${result} = Validator failed: Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>count=${count}</arg>
<arg>getter=${getter}</arg>
<arg>safe_validator=${safe_validator}</arg>
<arg>initial_state=${state}</arg>
<doc>Pass only if consecutively 1 times in a row with 60 between attempts: ${getter} creates data and ${safe_validator} passes. Validator updates its state even if it reports failure. Always return validator state, status and message.</doc>
<status status="PASS" start="2026-04-18T03:16:25.541703" elapsed="3.315848"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:16:28.857793" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:16:28.857645" elapsed="0.000197"/>
</branch>
<status status="PASS" start="2026-04-18T03:16:28.857626" elapsed="0.000237"/>
</if>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:16:28.859363" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:16:28.859456" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:16:28.859052" elapsed="0.000493">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:16:28.859653" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:16:28.859699" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:16:28.858645" elapsed="0.001077"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:16:28.859984" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:16:28.859866" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-04-18T03:16:28.859779" elapsed="0.000274"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:16:28.860485" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:16:28.860206" elapsed="0.000308"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:16:28.864152" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:16:28.864246" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:16:28.861045" elapsed="0.003285">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:16:28.864460" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:16:28.864672" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:16:28.860703" elapsed="0.003995"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:16:28.864906" elapsed="0.000029"/>
</return>
<status status="PASS" start="2026-04-18T03:16:28.864788" elapsed="0.000182"/>
</branch>
<status status="PASS" start="2026-04-18T03:16:28.864763" elapsed="0.000231"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:16:28.865179" elapsed="0.000027"/>
</kw>
<arg>${result}</arg>
<arg>Not possible to succeed within the deadline.</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:16:28.858182" elapsed="0.007188"/>
</kw>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:16:28.866915" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:16:28.866995" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:16:28.866621" elapsed="0.000437">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:16:28.867161" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:16:28.867205" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:16:28.866184" elapsed="0.001045"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:16:28.867433" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:16:28.867314" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-04-18T03:16:28.867292" elapsed="0.000212"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:16:28.867997" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:16:28.867682" elapsed="0.000343"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:16:28.871548" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:16:28.871638" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:16:28.868685" elapsed="0.003019">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:16:28.871997" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:16:28.872042" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:16:28.868195" elapsed="0.003871"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:16:28.872299" elapsed="0.000033"/>
</return>
<status status="PASS" start="2026-04-18T03:16:28.872157" elapsed="0.000212"/>
</branch>
<status status="PASS" start="2026-04-18T03:16:28.872131" elapsed="0.000263"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:16:28.872587" elapsed="0.000024"/>
</kw>
<arg>${result}</arg>
<arg>Getter failed</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:16:28.865719" elapsed="0.007036"/>
</kw>
<kw name="Sleep" owner="BuiltIn">
<msg time="2026-04-18T03:17:28.873569" level="INFO">Slept 1 minute.</msg>
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="PASS" start="2026-04-18T03:16:28.872914" elapsed="60.000969"/>
</kw>
<var name="${try}">11</var>
<status status="PASS" start="2026-04-18T03:16:25.540073" elapsed="63.333929"/>
</iter>
<iter>
<kw name="Getter_And_Safe_Stateful_Validator_Have_To_Succeed_Consecutively_By_Deadline" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:17:28.879040" level="INFO">${result} = No result yet.</msg>
<var>${result}</var>
<arg>No result yet.</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:17:28.878315" elapsed="0.000791"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:17:28.880625" level="INFO">${state} = 0</msg>
<var>${state}</var>
<arg>${initial_state}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:17:28.879695" elapsed="0.001007"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:17:28.881979" level="INFO">${sleeps} = 0</msg>
<var>${sleeps}</var>
<arg>${count} - 1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:17:28.881108" elapsed="0.000933"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:17:28.885142" level="INFO">${date_now} = 2026-04-18 03:17:28.885</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:17:28.884956" elapsed="0.000215"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:17:28.885927" level="INFO">${time_deadline} = 285.021</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:17:28.885332" elapsed="0.000624"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:17:28.886546" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:17:28.886124" elapsed="0.000451"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:17:28.886918" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:17:28.886657" elapsed="0.000317"/>
</branch>
<status status="PASS" start="2026-04-18T03:17:28.886632" elapsed="0.000368"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:17:28.883620" elapsed="0.003433"/>
</kw>
<msg time="2026-04-18T03:17:28.887157" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:17:28.887203" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:17:28.882427" elapsed="0.004799"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:17:28.887420" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:17:28.887308" elapsed="0.000264"/>
</branch>
<status status="PASS" start="2026-04-18T03:17:28.887290" elapsed="0.000315"/>
</if>
<for flavor="IN RANGE">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_As_Is" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:17:28.890896" level="INFO">${keyword} = Get_Ipv4_Topology_Count</msg>
<msg time="2026-04-18T03:17:28.890947" level="INFO">${args} = []</msg>
<msg time="2026-04-18T03:17:28.890997" level="INFO">${kwargs} = {'session': 'operational', 'topology': 'example-ipv4-topology'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:17:28.890482" elapsed="0.000540"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Get_Ipv4_Topology_Count" owner="PrefixCounting">
<kw name="Get_Ipv4_Topology" owner="PrefixCounting">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:17:31.934040" level="INFO">GET Request : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01agv6blx930rdupfsp7wkuo902.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-18T03:17:31.948818" level="INFO">GET Response : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Transfer-Encoding': 'chunked'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xmlns="urn:opendaylight:params:xml:ns:yang:odl-bgp-topology-types"/&gt;&lt;/topology-types&gt;&lt;node&gt;&lt;node-id&gt;192.0.2.1&lt;/node-id&gt;&lt;igp-node-attributes xmlns="urn:TBD:params:xml:ns:yang:nt:l3-unicast-igp-topology"&gt;&lt;prefix&gt;&lt;prefix&gt;8.20.15.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.65.76.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.222.18.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.234.69.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.59.125.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.205.46.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.69.249.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.243.186.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.86.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.138.152.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.201.33.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.107.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.133.25.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.19.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.45.49.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.194.22.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.226.161.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.211.127.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.100.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.254.101.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.205.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.60.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.234.208.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.228.239.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.27.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.177.154.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.201.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.148.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.160.202.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.48.218.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.52.93.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.93.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.182.185.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.34.217.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.116.158.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.236.169.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.223.35.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.103.82.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.7.2.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.131.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.40.95.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.244.132.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.28.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.253.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.83.39.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.4.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.193.28.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.36.83.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.143.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.73.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.128.217.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.135.39.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.6.81.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.78.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.54.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.250.105.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.110.78.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.182.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.4.223.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.49.100.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.5.205.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.165.63.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.36.184.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.214.36.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.171.128.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.208.52.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.113.57.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.3.37.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.237.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.160.220.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.198.13.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.174.151.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.48.34.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.21.1.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.1.30.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.108.237.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.89.117.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.218.102.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.24.70.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.41.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.48.122.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.51.175.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.79.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.25.67.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.153.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.219.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.88.115.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.129.239.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.117.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.204.169.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.10.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.139.169.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.79.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.53.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.31.83.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.117.152.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.46.66.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.86.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.3.214.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.74.90.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.197.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.54.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.41.3.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.97.95.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.179.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.188.172.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.219.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.124.44.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.187.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.197.228.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.87.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.133.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.78.124.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.149.209.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.33.23.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.243.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.189.185.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.80.206.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.150.251.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.208.98.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.125.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.213.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.71.27.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.234.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.109.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.112.121.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.8.69.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.201.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.203.154.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.73.19.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.169.175.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.15.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.4.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.75.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.68.155.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.16.40.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.231.11.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.85.57.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.191.139.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.191.228.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.75.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.3.166.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.32.247.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.242.134.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.184.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.164.222.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.35.248.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.209.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.60.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.129.2.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.88.147.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.222.193.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.58.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.61.198.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.32.165.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.120.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.251.232.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.111.147.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.203.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.161.229.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.68.153.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.105.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.252.41.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.2.231.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.240.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.146.121.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.92.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.151.79.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.10.14.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.95.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.155.232.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.32.13.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.92.229.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.102.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.118.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.83.215.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.38.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.110.203.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.240.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.116.31.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.238.174.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.235.83.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.4.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.122.151.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.21.216.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.146.154.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.199.188.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.194.94.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.153.168.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.255.64.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.22.16/28&lt;/pref... (set the log level to DEBUG or TRACE to see the full content) 
 </msg>
<msg time="2026-04-18T03:17:31.949945" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${PC_NW_TOPOLOGY}=${topology}?content=nonconfig</arg>
<arg>expected_status=anything</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-18T03:17:28.894116" elapsed="3.055897"/>
</kw>
<if>
<branch type="IF" condition="${response.status_code} != 200">
<kw name="Fail" owner="BuiltIn">
<arg>Get on ${topology} returned status code ${response.status_code} with message: ${response.text}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:17:31.953166" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:17:31.950276" elapsed="0.002984"/>
</branch>
<status status="PASS" start="2026-04-18T03:17:31.950198" elapsed="0.003111"/>
</if>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-18T03:17:31.953412" elapsed="0.000081"/>
</return>
<msg time="2026-04-18T03:17:31.960653" level="INFO">${topology} = &lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xml...</msg>
<var>${topology}</var>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>GET the example-ipv4-topology data, check status is 200, return the topology data.</doc>
<status status="PASS" start="2026-04-18T03:17:28.893085" elapsed="3.067683"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:17:32.051038" level="INFO">${prefix_count} = 0</msg>
<var>${prefix_count}</var>
<arg>len(re.findall('"prefix":"', '''${topology}'''))</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:17:31.961149" elapsed="0.089997"/>
</kw>
<return>
<value>${prefix_count}</value>
<status status="PASS" start="2026-04-18T03:17:32.051273" elapsed="0.000057"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Get topology. If not fail, return number of prefixes in the topology.</doc>
<status status="PASS" start="2026-04-18T03:17:28.891818" elapsed="3.159807"/>
</kw>
<msg time="2026-04-18T03:17:32.051721" level="INFO">${result} = 0</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:17:28.891197" elapsed="3.160551"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:17:32.051799" elapsed="0.000029"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure without affecting arguments.</doc>
<status status="PASS" start="2026-04-18T03:17:28.889896" elapsed="3.162030"/>
</kw>
<msg time="2026-04-18T03:17:32.052022" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:17:32.052066" level="INFO">${message} = 0</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:17:28.889342" elapsed="3.162748"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:17:32.052310" elapsed="0.025536"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:17:32.078846" elapsed="0.000036"/>
</return>
<status status="PASS" start="2026-04-18T03:17:32.078710" elapsed="0.000207"/>
</branch>
<status status="PASS" start="2026-04-18T03:17:32.078685" elapsed="0.000258"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:17:32.079109" elapsed="0.000023"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with 0.</doc>
<status status="PASS" start="2026-04-18T03:17:32.078276" elapsed="0.000916"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:17:32.079234" elapsed="0.000027"/>
</return>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:17:28.888733" elapsed="3.190625"/>
</kw>
<msg time="2026-04-18T03:17:32.079457" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:17:32.079504" level="INFO">${data} = 0</msg>
<var>${status}</var>
<var>${data}</var>
<arg>ScalarClosures.Run_Keyword_And_Collect_Garbage</arg>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:17:28.888258" elapsed="3.191284"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Getter failed: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:17:32.079728" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:17:32.079621" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-18T03:17:32.079602" elapsed="0.000196"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:17:32.081327" level="INFO">${date_now} = 2026-04-18 03:17:32.081</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:17:32.081150" elapsed="0.000205"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:17:32.082057" level="INFO">${time_deadline} = 281.825</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:17:32.081508" elapsed="0.000575"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:17:32.082672" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:17:32.082252" elapsed="0.000447"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:17:32.083024" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:17:32.082769" elapsed="0.000311"/>
</branch>
<status status="PASS" start="2026-04-18T03:17:32.082750" elapsed="0.000354"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:17:32.080466" elapsed="0.002685"/>
</kw>
<msg time="2026-04-18T03:17:32.083248" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:17:32.083292" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:17:32.079957" elapsed="0.003357"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:17:32.083612" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:17:32.083475" elapsed="0.000188"/>
</branch>
<status status="PASS" start="2026-04-18T03:17:32.083456" elapsed="0.000230"/>
</if>
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_After_Replacing_First_Two_Arguments" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:17:32.085691" level="INFO">${keyword} = WaitUtils.Excluding_Stability_Safe_Stateful_Validator_As_Keyword</msg>
<msg time="2026-04-18T03:17:32.085739" level="INFO">${args} = [0, 0]</msg>
<msg time="2026-04-18T03:17:32.085783" level="INFO">${kwargs} = {'excluded_value': '0'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:17:32.085365" elapsed="0.000441"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>0</arg>
<arg>${arg1}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:17:32.085968" elapsed="0.000206"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>1</arg>
<arg>${arg2}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:17:32.086333" elapsed="0.000207"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Excluding_Stability_Safe_Stateful_Validator_As_Keyword" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:17:32.088281" level="INFO">${new_state} = 0</msg>
<var>${new_state}</var>
<arg>${data}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:17:32.087874" elapsed="0.000433"/>
</kw>
<if>
<branch type="IF" condition="${data} == ${excluded_value}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Got the excluded value.</value>
<status status="PASS" start="2026-04-18T03:17:32.088616" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-18T03:17:32.088380" elapsed="0.000303"/>
</branch>
<status status="PASS" start="2026-04-18T03:17:32.088360" elapsed="0.000348"/>
</if>
<if>
<branch type="IF" condition="${data} != ${old_state}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Data value has changed.</value>
<status status="NOT RUN" start="2026-04-18T03:17:32.088798" elapsed="0.000147"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:17:32.088763" elapsed="0.000220"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:17:32.088748" elapsed="0.000258"/>
</if>
<return>
<value>${new_state}</value>
<value>PASS</value>
<value>Validated stable: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:17:32.089038" elapsed="0.000015"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Report failure if got the excluded value or if data value changed from last time. Useful to become validator.</doc>
<status status="PASS" start="2026-04-18T03:17:32.087408" elapsed="0.001751"/>
</kw>
<msg time="2026-04-18T03:17:32.089243" level="INFO">${result} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:17:32.086712" elapsed="0.002556"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:17:32.089315" elapsed="0.000027"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure with replaced first two positional arguments.</doc>
<status status="PASS" start="2026-04-18T03:17:32.084973" elapsed="0.004459"/>
</kw>
<msg time="2026-04-18T03:17:32.089538" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:17:32.089586" level="INFO">${message} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:17:32.084376" elapsed="0.005233"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:17:32.089775" elapsed="0.023590"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:17:32.114361" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-04-18T03:17:32.114228" elapsed="0.000201"/>
</branch>
<status status="PASS" start="2026-04-18T03:17:32.114206" elapsed="0.000248"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:17:32.114635" elapsed="0.000023"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with [0, 'FAIL', 'Got the excluded value.'].</doc>
<status status="PASS" start="2026-04-18T03:17:32.113821" elapsed="0.000896"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:17:32.114761" elapsed="0.000027"/>
</return>
<msg time="2026-04-18T03:17:32.114930" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:17:32.114975" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:17:32.115014" level="INFO">${result} = Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>ScalarClosures.Run_Closure_After_Replacing_First_Two_Arguments</arg>
<arg>${safe_validator}</arg>
<arg>${state}</arg>
<arg>${data}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:17:32.083911" elapsed="0.031125"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Validator failed: ${result}</value>
<status status="PASS" start="2026-04-18T03:17:32.115222" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-04-18T03:17:32.115116" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-04-18T03:17:32.115099" elapsed="0.000209"/>
</if>
<if>
<branch type="IF" condition="${sleeps_left} &lt;= 0">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:17:32.115397" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:17:32.115362" elapsed="0.000080"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:17:32.115347" elapsed="0.000117"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-18T03:17:32.115644" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:17:32.115777" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:17:32.115743" elapsed="0.000299"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:17:32.115727" elapsed="0.000340"/>
</if>
<kw name="Sleep" owner="BuiltIn">
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-04-18T03:17:32.116210" elapsed="0.000021"/>
</kw>
<var name="${sleeps_left}">0</var>
<status status="PASS" start="2026-04-18T03:17:28.888088" elapsed="3.228177"/>
</iter>
<var>${sleeps_left}</var>
<value>${count}-1</value>
<value>-1</value>
<value>-1</value>
<status status="PASS" start="2026-04-18T03:17:28.887650" elapsed="3.228651"/>
</for>
<kw name="Fail" owner="BuiltIn">
<arg>Logic error, we should have returned before.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:17:32.116475" elapsed="0.000021"/>
</kw>
<msg time="2026-04-18T03:17:32.116720" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:17:32.116765" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:17:32.116806" level="INFO">${result} = Validator failed: Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>count=${count}</arg>
<arg>getter=${getter}</arg>
<arg>safe_validator=${safe_validator}</arg>
<arg>initial_state=${state}</arg>
<doc>Pass only if consecutively 1 times in a row with 60 between attempts: ${getter} creates data and ${safe_validator} passes. Validator updates its state even if it reports failure. Always return validator state, status and message.</doc>
<status status="PASS" start="2026-04-18T03:17:28.876430" elapsed="3.240399"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:17:32.117022" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:17:32.116916" elapsed="0.000149"/>
</branch>
<status status="PASS" start="2026-04-18T03:17:32.116899" elapsed="0.000189"/>
</if>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:17:32.118429" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:17:32.118509" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:17:32.118154" elapsed="0.000439">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:17:32.118695" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:17:32.118738" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:17:32.117766" elapsed="0.000995"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:17:32.118943" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:17:32.118834" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-18T03:17:32.118816" elapsed="0.000194"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:17:32.119419" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:17:32.119158" elapsed="0.000289"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:17:32.122573" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:17:32.122651" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:17:32.119970" elapsed="0.002741">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:17:32.122815" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:17:32.122859" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:17:32.119628" elapsed="0.003255"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:17:32.123065" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-04-18T03:17:32.122957" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-04-18T03:17:32.122938" elapsed="0.000210"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:17:32.123297" elapsed="0.000021"/>
</kw>
<arg>${result}</arg>
<arg>Not possible to succeed within the deadline.</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:17:32.117359" elapsed="0.006088"/>
</kw>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:17:32.124810" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:17:32.124918" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:17:32.124499" elapsed="0.000508">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:17:32.125126" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:17:32.125175" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:17:32.124123" elapsed="0.001077"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:17:32.125393" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:17:32.125283" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-18T03:17:32.125263" elapsed="0.000198"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:17:32.125944" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:17:32.125664" elapsed="0.000307"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:17:32.128944" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:17:32.129019" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:17:32.126500" elapsed="0.002578">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:17:32.129229" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:17:32.129273" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:17:32.126145" elapsed="0.003150"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:17:32.129479" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-04-18T03:17:32.129371" elapsed="0.000184"/>
</branch>
<status status="PASS" start="2026-04-18T03:17:32.129351" elapsed="0.000230"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:17:32.129729" elapsed="0.000022"/>
</kw>
<arg>${result}</arg>
<arg>Getter failed</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:17:32.123742" elapsed="0.006140"/>
</kw>
<kw name="Sleep" owner="BuiltIn">
<msg time="2026-04-18T03:18:32.130832" level="INFO">Slept 1 minute.</msg>
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="PASS" start="2026-04-18T03:17:32.130035" elapsed="60.001190"/>
</kw>
<var name="${try}">12</var>
<status status="PASS" start="2026-04-18T03:17:28.874565" elapsed="63.256797"/>
</iter>
<iter>
<kw name="Getter_And_Safe_Stateful_Validator_Have_To_Succeed_Consecutively_By_Deadline" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:18:32.136097" level="INFO">${result} = No result yet.</msg>
<var>${result}</var>
<arg>No result yet.</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:18:32.135342" elapsed="0.000822"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:18:32.137346" level="INFO">${state} = 0</msg>
<var>${state}</var>
<arg>${initial_state}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:18:32.136599" elapsed="0.000806"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:18:32.138712" level="INFO">${sleeps} = 0</msg>
<var>${sleeps}</var>
<arg>${count} - 1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:18:32.137868" elapsed="0.000909"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:18:32.141717" level="INFO">${date_now} = 2026-04-18 03:18:32.142</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:18:32.141503" elapsed="0.000242"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:18:32.142322" level="INFO">${time_deadline} = 221.764</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:18:32.141906" elapsed="0.000444"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:18:32.142955" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:18:32.142517" elapsed="0.000465"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:18:32.143329" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:18:32.143067" elapsed="0.000319"/>
</branch>
<status status="PASS" start="2026-04-18T03:18:32.143041" elapsed="0.000375"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:18:32.140219" elapsed="0.003255"/>
</kw>
<msg time="2026-04-18T03:18:32.143603" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:18:32.143650" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:18:32.139163" elapsed="0.004511"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:18:32.143870" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:18:32.143757" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-04-18T03:18:32.143739" elapsed="0.000209"/>
</if>
<for flavor="IN RANGE">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_As_Is" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:18:32.146862" level="INFO">${keyword} = Get_Ipv4_Topology_Count</msg>
<msg time="2026-04-18T03:18:32.146911" level="INFO">${args} = []</msg>
<msg time="2026-04-18T03:18:32.146960" level="INFO">${kwargs} = {'session': 'operational', 'topology': 'example-ipv4-topology'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:18:32.146474" elapsed="0.000509"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Get_Ipv4_Topology_Count" owner="PrefixCounting">
<kw name="Get_Ipv4_Topology" owner="PrefixCounting">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:18:35.179587" level="INFO">GET Request : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01agv6blx930rdupfsp7wkuo902.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-18T03:18:35.195144" level="INFO">GET Response : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Transfer-Encoding': 'chunked'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xmlns="urn:opendaylight:params:xml:ns:yang:odl-bgp-topology-types"/&gt;&lt;/topology-types&gt;&lt;node&gt;&lt;node-id&gt;192.0.2.1&lt;/node-id&gt;&lt;igp-node-attributes xmlns="urn:TBD:params:xml:ns:yang:nt:l3-unicast-igp-topology"&gt;&lt;prefix&gt;&lt;prefix&gt;8.20.15.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.65.76.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.222.18.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.234.69.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.59.125.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.205.46.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.69.249.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.243.186.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.86.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.138.152.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.201.33.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.107.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.133.25.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.19.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.45.49.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.194.22.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.226.161.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.211.127.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.100.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.254.101.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.205.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.60.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.234.208.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.228.239.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.27.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.177.154.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.201.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.148.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.160.202.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.48.218.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.52.93.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.93.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.182.185.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.34.217.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.116.158.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.236.169.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.223.35.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.103.82.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.7.2.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.131.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.40.95.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.244.132.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.28.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.253.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.83.39.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.4.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.193.28.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.36.83.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.143.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.73.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.128.217.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.135.39.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.6.81.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.78.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.54.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.250.105.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.110.78.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.182.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.4.223.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.49.100.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.5.205.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.165.63.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.36.184.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.214.36.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.171.128.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.208.52.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.113.57.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.3.37.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.237.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.160.220.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.198.13.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.174.151.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.48.34.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.21.1.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.1.30.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.108.237.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.89.117.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.218.102.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.24.70.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.41.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.48.122.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.51.175.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.79.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.25.67.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.153.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.219.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.88.115.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.129.239.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.117.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.204.169.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.10.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.139.169.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.79.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.53.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.31.83.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.117.152.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.46.66.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.86.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.3.214.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.74.90.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.197.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.54.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.41.3.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.97.95.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.179.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.188.172.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.219.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.124.44.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.187.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.197.228.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.87.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.133.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.78.124.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.149.209.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.33.23.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.243.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.189.185.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.80.206.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.150.251.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.208.98.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.125.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.213.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.71.27.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.234.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.109.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.112.121.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.8.69.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.201.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.203.154.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.73.19.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.169.175.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.15.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.4.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.75.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.68.155.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.16.40.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.231.11.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.85.57.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.191.139.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.191.228.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.75.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.3.166.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.32.247.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.242.134.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.184.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.164.222.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.35.248.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.209.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.60.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.129.2.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.88.147.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.222.193.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.58.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.61.198.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.32.165.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.120.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.251.232.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.111.147.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.203.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.161.229.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.68.153.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.105.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.252.41.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.2.231.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.240.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.146.121.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.92.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.151.79.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.10.14.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.95.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.155.232.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.32.13.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.92.229.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.102.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.118.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.83.215.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.38.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.110.203.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.240.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.116.31.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.238.174.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.235.83.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.4.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.122.151.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.21.216.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.146.154.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.199.188.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.194.94.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.153.168.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.255.64.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.22.16/28&lt;/pref... (set the log level to DEBUG or TRACE to see the full content) 
 </msg>
<msg time="2026-04-18T03:18:35.198407" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${PC_NW_TOPOLOGY}=${topology}?content=nonconfig</arg>
<arg>expected_status=anything</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-18T03:18:32.150063" elapsed="3.048411"/>
</kw>
<if>
<branch type="IF" condition="${response.status_code} != 200">
<kw name="Fail" owner="BuiltIn">
<arg>Get on ${topology} returned status code ${response.status_code} with message: ${response.text}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:18:35.201555" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:18:35.198726" elapsed="0.002917"/>
</branch>
<status status="PASS" start="2026-04-18T03:18:35.198654" elapsed="0.003038"/>
</if>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-18T03:18:35.201794" elapsed="0.000077"/>
</return>
<msg time="2026-04-18T03:18:35.215101" level="INFO">${topology} = &lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xml...</msg>
<var>${topology}</var>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>GET the example-ipv4-topology data, check status is 200, return the topology data.</doc>
<status status="PASS" start="2026-04-18T03:18:32.149031" elapsed="3.066188"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:18:35.311740" level="INFO">${prefix_count} = 0</msg>
<var>${prefix_count}</var>
<arg>len(re.findall('"prefix":"', '''${topology}'''))</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:18:35.215614" elapsed="0.096228"/>
</kw>
<return>
<value>${prefix_count}</value>
<status status="PASS" start="2026-04-18T03:18:35.311989" elapsed="0.000073"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Get topology. If not fail, return number of prefixes in the topology.</doc>
<status status="PASS" start="2026-04-18T03:18:32.147726" elapsed="3.164622"/>
</kw>
<msg time="2026-04-18T03:18:35.312469" level="INFO">${result} = 0</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:18:32.147163" elapsed="3.165335"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:18:35.312573" elapsed="0.000030"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure without affecting arguments.</doc>
<status status="PASS" start="2026-04-18T03:18:32.146091" elapsed="3.166610"/>
</kw>
<msg time="2026-04-18T03:18:35.312801" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:18:35.312845" level="INFO">${message} = 0</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:18:32.145505" elapsed="3.167363"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:18:35.313092" elapsed="0.029168"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:18:35.343362" elapsed="0.000036"/>
</return>
<status status="PASS" start="2026-04-18T03:18:35.343225" elapsed="0.000209"/>
</branch>
<status status="PASS" start="2026-04-18T03:18:35.343200" elapsed="0.000261"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:18:35.343655" elapsed="0.000025"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with 0.</doc>
<status status="PASS" start="2026-04-18T03:18:35.342760" elapsed="0.000984"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:18:35.343817" elapsed="0.000034"/>
</return>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:18:32.145046" elapsed="3.198907"/>
</kw>
<msg time="2026-04-18T03:18:35.344055" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:18:35.344104" level="INFO">${data} = 0</msg>
<var>${status}</var>
<var>${data}</var>
<arg>ScalarClosures.Run_Keyword_And_Collect_Garbage</arg>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:18:32.144574" elapsed="3.199553"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Getter failed: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:18:35.344310" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:18:35.344203" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-18T03:18:35.344185" elapsed="0.000195"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:18:35.345844" level="INFO">${date_now} = 2026-04-18 03:18:35.346</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:18:35.345668" elapsed="0.000205"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:18:35.346409" level="INFO">${time_deadline} = 218.56</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:18:35.346031" elapsed="0.000404"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:18:35.347012" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:18:35.346617" elapsed="0.000422"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:18:35.347359" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:18:35.347111" elapsed="0.000303"/>
</branch>
<status status="PASS" start="2026-04-18T03:18:35.347091" elapsed="0.000346"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:18:35.345062" elapsed="0.002423"/>
</kw>
<msg time="2026-04-18T03:18:35.347599" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:18:35.347644" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:18:35.344558" elapsed="0.003109"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:18:35.347955" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:18:35.347845" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-04-18T03:18:35.347826" elapsed="0.000201"/>
</if>
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_After_Replacing_First_Two_Arguments" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:18:35.350014" level="INFO">${keyword} = WaitUtils.Excluding_Stability_Safe_Stateful_Validator_As_Keyword</msg>
<msg time="2026-04-18T03:18:35.350062" level="INFO">${args} = [0, 0]</msg>
<msg time="2026-04-18T03:18:35.350108" level="INFO">${kwargs} = {'excluded_value': '0'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:18:35.349706" elapsed="0.000425"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>0</arg>
<arg>${arg1}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:18:35.350294" elapsed="0.000209"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>1</arg>
<arg>${arg2}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:18:35.350700" elapsed="0.000196"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Excluding_Stability_Safe_Stateful_Validator_As_Keyword" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:18:35.352671" level="INFO">${new_state} = 0</msg>
<var>${new_state}</var>
<arg>${data}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:18:35.352241" elapsed="0.000458"/>
</kw>
<if>
<branch type="IF" condition="${data} == ${excluded_value}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Got the excluded value.</value>
<status status="PASS" start="2026-04-18T03:18:35.352941" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-18T03:18:35.352769" elapsed="0.000239"/>
</branch>
<status status="PASS" start="2026-04-18T03:18:35.352751" elapsed="0.000282"/>
</if>
<if>
<branch type="IF" condition="${data} != ${old_state}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Data value has changed.</value>
<status status="NOT RUN" start="2026-04-18T03:18:35.353122" elapsed="0.000148"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:18:35.353088" elapsed="0.000219"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:18:35.353072" elapsed="0.000258"/>
</if>
<return>
<value>${new_state}</value>
<value>PASS</value>
<value>Validated stable: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:18:35.353363" elapsed="0.000014"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Report failure if got the excluded value or if data value changed from last time. Useful to become validator.</doc>
<status status="PASS" start="2026-04-18T03:18:35.351795" elapsed="0.001689"/>
</kw>
<msg time="2026-04-18T03:18:35.353590" level="INFO">${result} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:18:35.351062" elapsed="0.002553"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:18:35.353665" elapsed="0.000027"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure with replaced first two positional arguments.</doc>
<status status="PASS" start="2026-04-18T03:18:35.349290" elapsed="0.004493"/>
</kw>
<msg time="2026-04-18T03:18:35.353874" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:18:35.353918" level="INFO">${message} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:18:35.348736" elapsed="0.005206"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:18:35.354107" elapsed="0.028159"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:18:35.383343" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-04-18T03:18:35.383203" elapsed="0.000209"/>
</branch>
<status status="PASS" start="2026-04-18T03:18:35.383173" elapsed="0.000264"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:18:35.383637" elapsed="0.000025"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with [0, 'FAIL', 'Got the excluded value.'].</doc>
<status status="PASS" start="2026-04-18T03:18:35.382727" elapsed="0.000996"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:18:35.383770" elapsed="0.000028"/>
</return>
<msg time="2026-04-18T03:18:35.383964" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:18:35.384018" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:18:35.384064" level="INFO">${result} = Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>ScalarClosures.Run_Closure_After_Replacing_First_Two_Arguments</arg>
<arg>${safe_validator}</arg>
<arg>${state}</arg>
<arg>${data}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:18:35.348252" elapsed="0.035836"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Validator failed: ${result}</value>
<status status="PASS" start="2026-04-18T03:18:35.384307" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-18T03:18:35.384174" elapsed="0.000201"/>
</branch>
<status status="PASS" start="2026-04-18T03:18:35.384155" elapsed="0.000245"/>
</if>
<if>
<branch type="IF" condition="${sleeps_left} &lt;= 0">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:18:35.384492" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:18:35.384456" elapsed="0.000098"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:18:35.384440" elapsed="0.000137"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-18T03:18:35.384737" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:18:35.384872" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:18:35.384838" elapsed="0.000198"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:18:35.384821" elapsed="0.000253"/>
</if>
<kw name="Sleep" owner="BuiltIn">
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-04-18T03:18:35.385246" elapsed="0.000027"/>
</kw>
<var name="${sleeps_left}">0</var>
<status status="PASS" start="2026-04-18T03:18:32.144403" elapsed="3.240908"/>
</iter>
<var>${sleeps_left}</var>
<value>${count}-1</value>
<value>-1</value>
<value>-1</value>
<status status="PASS" start="2026-04-18T03:18:32.143993" elapsed="3.241355"/>
</for>
<kw name="Fail" owner="BuiltIn">
<arg>Logic error, we should have returned before.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:18:35.385505" elapsed="0.000036"/>
</kw>
<msg time="2026-04-18T03:18:35.385748" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:18:35.385792" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:18:35.385831" level="INFO">${result} = Validator failed: Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>count=${count}</arg>
<arg>getter=${getter}</arg>
<arg>safe_validator=${safe_validator}</arg>
<arg>initial_state=${state}</arg>
<doc>Pass only if consecutively 1 times in a row with 60 between attempts: ${getter} creates data and ${safe_validator} passes. Validator updates its state even if it reports failure. Always return validator state, status and message.</doc>
<status status="PASS" start="2026-04-18T03:18:32.133486" elapsed="3.252367"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:18:35.386082" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:18:35.385951" elapsed="0.000178"/>
</branch>
<status status="PASS" start="2026-04-18T03:18:35.385923" elapsed="0.000229"/>
</if>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:18:35.387652" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:18:35.387738" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:18:35.387301" elapsed="0.000507">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:18:35.387909" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:18:35.387952" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:18:35.386864" elapsed="0.001110"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:18:35.388215" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:18:35.388072" elapsed="0.000193"/>
</branch>
<status status="PASS" start="2026-04-18T03:18:35.388049" elapsed="0.000240"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:18:35.388755" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:18:35.388460" elapsed="0.000323"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:18:35.392005" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:18:35.392098" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:18:35.389345" elapsed="0.002823">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:18:35.392297" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:18:35.392339" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:18:35.388950" elapsed="0.003412"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:18:35.392566" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-18T03:18:35.392438" elapsed="0.000189"/>
</branch>
<status status="PASS" start="2026-04-18T03:18:35.392418" elapsed="0.000232"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:18:35.392800" elapsed="0.000022"/>
</kw>
<arg>${result}</arg>
<arg>Not possible to succeed within the deadline.</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:18:35.386457" elapsed="0.006495"/>
</kw>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:18:35.394356" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:18:35.394432" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:18:35.394031" elapsed="0.000459">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:18:35.394610" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:18:35.394652" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:18:35.393685" elapsed="0.000990"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:18:35.394861" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:18:35.394751" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-18T03:18:35.394731" elapsed="0.000197"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:18:35.395383" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:18:35.395084" elapsed="0.000326"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:18:35.398374" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:18:35.398447" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:18:35.395961" elapsed="0.002543">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:18:35.398662" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:18:35.398706" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:18:35.395621" elapsed="0.003107"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:18:35.398913" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-18T03:18:35.398804" elapsed="0.000170"/>
</branch>
<status status="PASS" start="2026-04-18T03:18:35.398785" elapsed="0.000213"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:18:35.399153" elapsed="0.000021"/>
</kw>
<arg>${result}</arg>
<arg>Getter failed</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:18:35.393280" elapsed="0.006034"/>
</kw>
<kw name="Sleep" owner="BuiltIn">
<msg time="2026-04-18T03:19:35.400458" level="INFO">Slept 1 minute.</msg>
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="PASS" start="2026-04-18T03:18:35.399514" elapsed="60.001633"/>
</kw>
<var name="${try}">13</var>
<status status="PASS" start="2026-04-18T03:18:32.131945" elapsed="63.269374"/>
</iter>
<iter>
<kw name="Getter_And_Safe_Stateful_Validator_Have_To_Succeed_Consecutively_By_Deadline" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:19:35.405252" level="INFO">${result} = No result yet.</msg>
<var>${result}</var>
<arg>No result yet.</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:19:35.404760" elapsed="0.000533"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:19:35.405999" level="INFO">${state} = 0</msg>
<var>${state}</var>
<arg>${initial_state}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:19:35.405568" elapsed="0.000469"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:19:35.406825" level="INFO">${sleeps} = 0</msg>
<var>${sleeps}</var>
<arg>${count} - 1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:19:35.406277" elapsed="0.000587"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:19:35.409346" level="INFO">${date_now} = 2026-04-18 03:19:35.409</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:19:35.409087" elapsed="0.000299"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:19:35.410234" level="INFO">${time_deadline} = 158.497</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:19:35.409650" elapsed="0.000624"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:19:35.411190" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:19:35.410513" elapsed="0.000728"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:19:35.411677" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:19:35.411370" elapsed="0.000367"/>
</branch>
<status status="PASS" start="2026-04-18T03:19:35.411335" elapsed="0.000430"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:19:35.407846" elapsed="0.003975"/>
</kw>
<msg time="2026-04-18T03:19:35.411928" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:19:35.411973" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:19:35.407156" elapsed="0.004842"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:19:35.412232" elapsed="0.000024"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:19:35.412085" elapsed="0.000211"/>
</branch>
<status status="PASS" start="2026-04-18T03:19:35.412062" elapsed="0.000258"/>
</if>
<for flavor="IN RANGE">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_As_Is" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:19:35.415207" level="INFO">${keyword} = Get_Ipv4_Topology_Count</msg>
<msg time="2026-04-18T03:19:35.415256" level="INFO">${args} = []</msg>
<msg time="2026-04-18T03:19:35.415304" level="INFO">${kwargs} = {'session': 'operational', 'topology': 'example-ipv4-topology'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:19:35.414811" elapsed="0.000516"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Get_Ipv4_Topology_Count" owner="PrefixCounting">
<kw name="Get_Ipv4_Topology" owner="PrefixCounting">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:19:38.428262" level="INFO">GET Request : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01agv6blx930rdupfsp7wkuo902.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-18T03:19:38.441068" level="INFO">GET Response : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Transfer-Encoding': 'chunked'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xmlns="urn:opendaylight:params:xml:ns:yang:odl-bgp-topology-types"/&gt;&lt;/topology-types&gt;&lt;node&gt;&lt;node-id&gt;192.0.2.1&lt;/node-id&gt;&lt;igp-node-attributes xmlns="urn:TBD:params:xml:ns:yang:nt:l3-unicast-igp-topology"&gt;&lt;prefix&gt;&lt;prefix&gt;8.20.15.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.65.76.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.222.18.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.234.69.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.59.125.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.205.46.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.69.249.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.243.186.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.86.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.138.152.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.201.33.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.107.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.133.25.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.19.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.45.49.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.194.22.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.226.161.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.211.127.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.100.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.254.101.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.205.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.60.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.234.208.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.228.239.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.27.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.177.154.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.201.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.148.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.160.202.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.48.218.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.52.93.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.93.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.182.185.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.34.217.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.116.158.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.236.169.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.223.35.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.103.82.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.7.2.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.131.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.40.95.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.244.132.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.28.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.253.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.83.39.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.4.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.193.28.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.36.83.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.143.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.73.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.128.217.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.135.39.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.6.81.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.78.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.54.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.250.105.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.110.78.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.182.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.4.223.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.49.100.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.5.205.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.165.63.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.36.184.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.214.36.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.171.128.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.208.52.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.113.57.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.3.37.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.237.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.160.220.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.198.13.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.174.151.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.48.34.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.21.1.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.1.30.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.108.237.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.89.117.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.218.102.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.24.70.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.41.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.48.122.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.51.175.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.79.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.25.67.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.153.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.219.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.88.115.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.129.239.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.117.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.204.169.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.10.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.139.169.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.79.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.53.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.31.83.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.117.152.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.46.66.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.86.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.3.214.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.74.90.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.197.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.54.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.41.3.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.97.95.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.179.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.188.172.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.219.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.124.44.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.187.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.197.228.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.87.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.133.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.78.124.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.149.209.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.33.23.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.243.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.189.185.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.80.206.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.150.251.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.208.98.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.125.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.213.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.71.27.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.234.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.109.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.112.121.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.8.69.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.201.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.203.154.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.73.19.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.169.175.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.15.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.4.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.75.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.68.155.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.16.40.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.231.11.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.85.57.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.191.139.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.191.228.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.75.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.3.166.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.32.247.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.242.134.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.184.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.164.222.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.35.248.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.209.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.60.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.129.2.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.88.147.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.222.193.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.58.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.61.198.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.32.165.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.120.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.251.232.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.111.147.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.203.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.161.229.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.68.153.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.105.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.252.41.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.2.231.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.240.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.146.121.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.92.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.151.79.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.10.14.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.95.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.155.232.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.32.13.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.92.229.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.102.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.118.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.83.215.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.38.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.110.203.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.240.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.116.31.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.238.174.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.235.83.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.4.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.122.151.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.21.216.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.146.154.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.199.188.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.194.94.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.153.168.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.255.64.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.22.16/28&lt;/pref... (set the log level to DEBUG or TRACE to see the full content) 
 </msg>
<msg time="2026-04-18T03:19:38.441727" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${PC_NW_TOPOLOGY}=${topology}?content=nonconfig</arg>
<arg>expected_status=anything</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-18T03:19:35.418600" elapsed="3.023190"/>
</kw>
<if>
<branch type="IF" condition="${response.status_code} != 200">
<kw name="Fail" owner="BuiltIn">
<arg>Get on ${topology} returned status code ${response.status_code} with message: ${response.text}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:19:38.444871" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:19:38.442034" elapsed="0.002921"/>
</branch>
<status status="PASS" start="2026-04-18T03:19:38.441962" elapsed="0.003042"/>
</if>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-18T03:19:38.445108" elapsed="0.000082"/>
</return>
<msg time="2026-04-18T03:19:38.452447" level="INFO">${topology} = &lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xml...</msg>
<var>${topology}</var>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>GET the example-ipv4-topology data, check status is 200, return the topology data.</doc>
<status status="PASS" start="2026-04-18T03:19:35.417582" elapsed="3.035029"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:19:38.544761" level="INFO">${prefix_count} = 0</msg>
<var>${prefix_count}</var>
<arg>len(re.findall('"prefix":"', '''${topology}'''))</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:19:38.452992" elapsed="0.091878"/>
</kw>
<return>
<value>${prefix_count}</value>
<status status="PASS" start="2026-04-18T03:19:38.545005" elapsed="0.000064"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Get topology. If not fail, return number of prefixes in the topology.</doc>
<status status="PASS" start="2026-04-18T03:19:35.416012" elapsed="3.129353"/>
</kw>
<msg time="2026-04-18T03:19:38.545468" level="INFO">${result} = 0</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:19:35.415498" elapsed="3.129998"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:19:38.545571" elapsed="0.000031"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure without affecting arguments.</doc>
<status status="PASS" start="2026-04-18T03:19:35.414413" elapsed="3.131294"/>
</kw>
<msg time="2026-04-18T03:19:38.545806" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:19:38.545851" level="INFO">${message} = 0</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:19:35.413875" elapsed="3.132001"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:19:38.546106" elapsed="0.027918"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:19:38.575061" elapsed="0.000036"/>
</return>
<status status="PASS" start="2026-04-18T03:19:38.574927" elapsed="0.000205"/>
</branch>
<status status="PASS" start="2026-04-18T03:19:38.574903" elapsed="0.000253"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:19:38.575323" elapsed="0.000023"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with 0.</doc>
<status status="PASS" start="2026-04-18T03:19:38.574475" elapsed="0.000931"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:19:38.575450" elapsed="0.000028"/>
</return>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:19:35.413416" elapsed="3.162179"/>
</kw>
<msg time="2026-04-18T03:19:38.575693" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:19:38.575739" level="INFO">${data} = 0</msg>
<var>${status}</var>
<var>${data}</var>
<arg>ScalarClosures.Run_Keyword_And_Collect_Garbage</arg>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:19:35.412960" elapsed="3.162802"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Getter failed: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:19:38.575945" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:19:38.575839" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-18T03:19:38.575821" elapsed="0.000195"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:19:38.577475" level="INFO">${date_now} = 2026-04-18 03:19:38.577</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:19:38.577304" elapsed="0.000199"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:19:38.578052" level="INFO">${time_deadline} = 155.329</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:19:38.577678" elapsed="0.000401"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:19:38.578654" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:19:38.578243" elapsed="0.000437"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:19:38.579004" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:19:38.578753" elapsed="0.000306"/>
</branch>
<status status="PASS" start="2026-04-18T03:19:38.578733" elapsed="0.000350"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:19:38.576720" elapsed="0.002411"/>
</kw>
<msg time="2026-04-18T03:19:38.579230" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:19:38.579274" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:19:38.576174" elapsed="0.003122"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:19:38.579578" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:19:38.579453" elapsed="0.000176"/>
</branch>
<status status="PASS" start="2026-04-18T03:19:38.579435" elapsed="0.000216"/>
</if>
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_After_Replacing_First_Two_Arguments" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:19:38.581712" level="INFO">${keyword} = WaitUtils.Excluding_Stability_Safe_Stateful_Validator_As_Keyword</msg>
<msg time="2026-04-18T03:19:38.581761" level="INFO">${args} = [0, 0]</msg>
<msg time="2026-04-18T03:19:38.581807" level="INFO">${kwargs} = {'excluded_value': '0'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:19:38.581376" elapsed="0.000453"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>0</arg>
<arg>${arg1}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:19:38.581994" elapsed="0.000213"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>1</arg>
<arg>${arg2}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:19:38.582368" elapsed="0.000210"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Excluding_Stability_Safe_Stateful_Validator_As_Keyword" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:19:38.584321" level="INFO">${new_state} = 0</msg>
<var>${new_state}</var>
<arg>${data}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:19:38.583909" elapsed="0.000439"/>
</kw>
<if>
<branch type="IF" condition="${data} == ${excluded_value}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Got the excluded value.</value>
<status status="PASS" start="2026-04-18T03:19:38.584631" elapsed="0.000031"/>
</return>
<status status="PASS" start="2026-04-18T03:19:38.584421" elapsed="0.000282"/>
</branch>
<status status="PASS" start="2026-04-18T03:19:38.584400" elapsed="0.000328"/>
</if>
<if>
<branch type="IF" condition="${data} != ${old_state}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Data value has changed.</value>
<status status="NOT RUN" start="2026-04-18T03:19:38.584819" elapsed="0.000158"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:19:38.584784" elapsed="0.000231"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:19:38.584768" elapsed="0.000269"/>
</if>
<return>
<value>${new_state}</value>
<value>PASS</value>
<value>Validated stable: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:19:38.585070" elapsed="0.000014"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Report failure if got the excluded value or if data value changed from last time. Useful to become validator.</doc>
<status status="PASS" start="2026-04-18T03:19:38.583436" elapsed="0.001754"/>
</kw>
<msg time="2026-04-18T03:19:38.585274" level="INFO">${result} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:19:38.582745" elapsed="0.002554"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:19:38.585346" elapsed="0.000027"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure with replaced first two positional arguments.</doc>
<status status="PASS" start="2026-04-18T03:19:38.580980" elapsed="0.004483"/>
</kw>
<msg time="2026-04-18T03:19:38.585572" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:19:38.585618" level="INFO">${message} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:19:38.580355" elapsed="0.005287"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:19:38.585807" elapsed="0.028142"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:19:38.614962" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-04-18T03:19:38.614811" elapsed="0.000219"/>
</branch>
<status status="PASS" start="2026-04-18T03:19:38.614788" elapsed="0.000267"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:19:38.615222" elapsed="0.000022"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with [0, 'FAIL', 'Got the excluded value.'].</doc>
<status status="PASS" start="2026-04-18T03:19:38.614387" elapsed="0.000916"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:19:38.615347" elapsed="0.000027"/>
</return>
<msg time="2026-04-18T03:19:38.615517" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:19:38.615583" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:19:38.615624" level="INFO">${result} = Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>ScalarClosures.Run_Closure_After_Replacing_First_Two_Arguments</arg>
<arg>${safe_validator}</arg>
<arg>${state}</arg>
<arg>${data}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:19:38.579882" elapsed="0.035765"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Validator failed: ${result}</value>
<status status="PASS" start="2026-04-18T03:19:38.615835" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-04-18T03:19:38.615729" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-04-18T03:19:38.615712" elapsed="0.000209"/>
</if>
<if>
<branch type="IF" condition="${sleeps_left} &lt;= 0">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:19:38.616010" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:19:38.615975" elapsed="0.000079"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:19:38.615959" elapsed="0.000118"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-18T03:19:38.616234" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:19:38.616366" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:19:38.616332" elapsed="0.000147"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:19:38.616316" elapsed="0.000188"/>
</if>
<kw name="Sleep" owner="BuiltIn">
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-04-18T03:19:38.616664" elapsed="0.000021"/>
</kw>
<var name="${sleeps_left}">0</var>
<status status="PASS" start="2026-04-18T03:19:35.412805" elapsed="3.203915"/>
</iter>
<var>${sleeps_left}</var>
<value>${count}-1</value>
<value>-1</value>
<value>-1</value>
<status status="PASS" start="2026-04-18T03:19:35.412366" elapsed="3.204402"/>
</for>
<kw name="Fail" owner="BuiltIn">
<arg>Logic error, we should have returned before.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:19:38.616923" elapsed="0.000021"/>
</kw>
<msg time="2026-04-18T03:19:38.617144" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:19:38.617187" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:19:38.617234" level="INFO">${result} = Validator failed: Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>count=${count}</arg>
<arg>getter=${getter}</arg>
<arg>safe_validator=${safe_validator}</arg>
<arg>initial_state=${state}</arg>
<doc>Pass only if consecutively 1 times in a row with 60 between attempts: ${getter} creates data and ${safe_validator} passes. Validator updates its state even if it reports failure. Always return validator state, status and message.</doc>
<status status="PASS" start="2026-04-18T03:19:35.403502" elapsed="3.213760"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:19:38.617469" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:19:38.617362" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-04-18T03:19:38.617344" elapsed="0.000209"/>
</if>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:19:38.618898" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:19:38.618980" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:19:38.618616" elapsed="0.000433">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:19:38.619150" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:19:38.619192" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:19:38.618208" elapsed="0.001006"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:19:38.619395" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:19:38.619288" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-04-18T03:19:38.619269" elapsed="0.000192"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:19:38.619893" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:19:38.619630" elapsed="0.000291"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:19:38.623179" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:19:38.623257" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:19:38.620427" elapsed="0.002890">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:19:38.623421" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:19:38.623464" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:19:38.620087" elapsed="0.003399"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:19:38.623688" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-18T03:19:38.623579" elapsed="0.000169"/>
</branch>
<status status="PASS" start="2026-04-18T03:19:38.623559" elapsed="0.000212"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:19:38.623921" elapsed="0.000022"/>
</kw>
<arg>${result}</arg>
<arg>Not possible to succeed within the deadline.</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:19:38.617829" elapsed="0.006243"/>
</kw>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:19:38.625364" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:19:38.625438" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:19:38.625109" elapsed="0.000387">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:19:38.625613" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:19:38.625656" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:19:38.624750" elapsed="0.000929"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:19:38.625858" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:19:38.625752" elapsed="0.000149"/>
</branch>
<status status="PASS" start="2026-04-18T03:19:38.625734" elapsed="0.000189"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:19:38.626323" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:19:38.626077" elapsed="0.000272"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:19:38.629293" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:19:38.629367" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:19:38.626866" elapsed="0.002559">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:19:38.629588" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:19:38.629633" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:19:38.626513" elapsed="0.003143"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:19:38.629839" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-18T03:19:38.629731" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-04-18T03:19:38.629712" elapsed="0.000212"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:19:38.630075" elapsed="0.000021"/>
</kw>
<arg>${result}</arg>
<arg>Getter failed</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:19:38.624355" elapsed="0.005871"/>
</kw>
<kw name="Sleep" owner="BuiltIn">
<msg time="2026-04-18T03:20:38.631044" level="INFO">Slept 1 minute.</msg>
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="PASS" start="2026-04-18T03:19:38.630381" elapsed="60.000950"/>
</kw>
<var name="${try}">14</var>
<status status="PASS" start="2026-04-18T03:19:35.401946" elapsed="63.229519"/>
</iter>
<iter>
<kw name="Getter_And_Safe_Stateful_Validator_Have_To_Succeed_Consecutively_By_Deadline" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:20:38.636072" level="INFO">${result} = No result yet.</msg>
<var>${result}</var>
<arg>No result yet.</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:20:38.635416" elapsed="0.000699"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:20:38.636850" level="INFO">${state} = 0</msg>
<var>${state}</var>
<arg>${initial_state}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:20:38.636378" elapsed="0.000513"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:20:38.637687" level="INFO">${sleeps} = 0</msg>
<var>${sleeps}</var>
<arg>${count} - 1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:20:38.637139" elapsed="0.000589"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:20:38.640570" level="INFO">${date_now} = 2026-04-18 03:20:38.640</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:20:38.640278" elapsed="0.000337"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:20:38.641434" level="INFO">${time_deadline} = 95.266</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:20:38.640876" elapsed="0.000598"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:20:38.642627" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:20:38.641805" elapsed="0.000876"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:20:38.643443" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:20:38.642899" elapsed="0.000698"/>
</branch>
<status status="PASS" start="2026-04-18T03:20:38.642792" elapsed="0.000858"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:20:38.638834" elapsed="0.004922"/>
</kw>
<msg time="2026-04-18T03:20:38.643957" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:20:38.644022" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:20:38.637984" elapsed="0.006070"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:20:38.644321" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:20:38.644164" elapsed="0.000218"/>
</branch>
<status status="PASS" start="2026-04-18T03:20:38.644138" elapsed="0.000267"/>
</if>
<for flavor="IN RANGE">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_As_Is" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:20:38.647618" level="INFO">${keyword} = Get_Ipv4_Topology_Count</msg>
<msg time="2026-04-18T03:20:38.647672" level="INFO">${args} = []</msg>
<msg time="2026-04-18T03:20:38.647733" level="INFO">${kwargs} = {'session': 'operational', 'topology': 'example-ipv4-topology'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:20:38.647203" elapsed="0.000561"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Get_Ipv4_Topology_Count" owner="PrefixCounting">
<kw name="Get_Ipv4_Topology" owner="PrefixCounting">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:20:41.736171" level="INFO">GET Request : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01agv6blx930rdupfsp7wkuo902.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-18T03:20:41.751608" level="INFO">GET Response : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Transfer-Encoding': 'chunked'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xmlns="urn:opendaylight:params:xml:ns:yang:odl-bgp-topology-types"/&gt;&lt;/topology-types&gt;&lt;node&gt;&lt;node-id&gt;192.0.2.1&lt;/node-id&gt;&lt;igp-node-attributes xmlns="urn:TBD:params:xml:ns:yang:nt:l3-unicast-igp-topology"&gt;&lt;prefix&gt;&lt;prefix&gt;8.20.15.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.65.76.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.222.18.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.234.69.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.59.125.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.205.46.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.69.249.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.243.186.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.86.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.138.152.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.201.33.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.107.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.133.25.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.19.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.45.49.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.194.22.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.226.161.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.211.127.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.100.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.254.101.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.205.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.60.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.234.208.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.228.239.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.27.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.177.154.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.201.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.148.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.160.202.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.48.218.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.52.93.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.93.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.182.185.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.34.217.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.116.158.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.236.169.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.223.35.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.103.82.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.7.2.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.131.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.40.95.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.244.132.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.28.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.253.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.83.39.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.4.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.193.28.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.36.83.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.143.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.73.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.128.217.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.135.39.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.6.81.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.78.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.54.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.250.105.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.110.78.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.182.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.4.223.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.49.100.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.5.205.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.165.63.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.36.184.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.214.36.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.171.128.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.208.52.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.113.57.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.3.37.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.237.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.160.220.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.198.13.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.174.151.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.48.34.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.21.1.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.1.30.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.108.237.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.89.117.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.218.102.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.24.70.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.41.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.48.122.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.51.175.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.79.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.25.67.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.153.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.219.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.88.115.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.129.239.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.117.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.204.169.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.10.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.139.169.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.79.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.53.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.31.83.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.117.152.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.46.66.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.86.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.3.214.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.74.90.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.197.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.54.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.41.3.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.97.95.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.179.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.188.172.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.219.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.124.44.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.187.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.197.228.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.87.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.133.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.78.124.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.149.209.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.33.23.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.243.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.189.185.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.80.206.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.150.251.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.208.98.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.125.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.213.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.71.27.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.234.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.109.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.112.121.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.8.69.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.201.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.203.154.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.73.19.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.169.175.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.15.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.4.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.75.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.68.155.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.16.40.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.231.11.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.85.57.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.191.139.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.191.228.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.75.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.3.166.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.32.247.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.242.134.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.184.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.164.222.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.35.248.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.209.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.60.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.129.2.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.88.147.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.222.193.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.58.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.61.198.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.32.165.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.120.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.251.232.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.111.147.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.203.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.161.229.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.68.153.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.105.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.252.41.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.2.231.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.240.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.146.121.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.92.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.151.79.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.10.14.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.95.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.155.232.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.32.13.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.92.229.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.102.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.118.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.83.215.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.38.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.110.203.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.240.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.116.31.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.238.174.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.235.83.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.4.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.122.151.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.21.216.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.146.154.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.199.188.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.194.94.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.153.168.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.255.64.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.22.16/28&lt;/pref... (set the log level to DEBUG or TRACE to see the full content) 
 </msg>
<msg time="2026-04-18T03:20:41.755261" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${PC_NW_TOPOLOGY}=${topology}?content=nonconfig</arg>
<arg>expected_status=anything</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-18T03:20:38.651181" elapsed="3.104154"/>
</kw>
<if>
<branch type="IF" condition="${response.status_code} != 200">
<kw name="Fail" owner="BuiltIn">
<arg>Get on ${topology} returned status code ${response.status_code} with message: ${response.text}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:20:41.758686" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:20:41.755651" elapsed="0.003159"/>
</branch>
<status status="PASS" start="2026-04-18T03:20:41.755558" elapsed="0.003302"/>
</if>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-18T03:20:41.758966" elapsed="0.000082"/>
</return>
<msg time="2026-04-18T03:20:41.773389" level="INFO">${topology} = &lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xml...</msg>
<var>${topology}</var>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>GET the example-ipv4-topology data, check status is 200, return the topology data.</doc>
<status status="PASS" start="2026-04-18T03:20:38.650139" elapsed="3.123448"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:20:41.879316" level="INFO">${prefix_count} = 0</msg>
<var>${prefix_count}</var>
<arg>len(re.findall('"prefix":"', '''${topology}'''))</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:20:41.774088" elapsed="0.105556"/>
</kw>
<return>
<value>${prefix_count}</value>
<status status="PASS" start="2026-04-18T03:20:41.879776" elapsed="0.000068"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Get topology. If not fail, return number of prefixes in the topology.</doc>
<status status="PASS" start="2026-04-18T03:20:38.648711" elapsed="3.231420"/>
</kw>
<msg time="2026-04-18T03:20:41.880230" level="INFO">${result} = 0</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:20:38.647977" elapsed="3.232279"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:20:41.880309" elapsed="0.000030"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure without affecting arguments.</doc>
<status status="PASS" start="2026-04-18T03:20:38.646787" elapsed="3.233651"/>
</kw>
<msg time="2026-04-18T03:20:41.880554" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:20:41.880601" level="INFO">${message} = 0</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:20:38.646212" elapsed="3.234414"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:20:41.880856" elapsed="0.036006"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:20:41.917974" elapsed="0.000039"/>
</return>
<status status="PASS" start="2026-04-18T03:20:41.917836" elapsed="0.000213"/>
</branch>
<status status="PASS" start="2026-04-18T03:20:41.917810" elapsed="0.000264"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:20:41.918245" elapsed="0.000024"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with 0.</doc>
<status status="PASS" start="2026-04-18T03:20:41.917374" elapsed="0.000956"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:20:41.918375" elapsed="0.000028"/>
</return>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:20:38.645678" elapsed="3.272822"/>
</kw>
<msg time="2026-04-18T03:20:41.918618" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:20:41.918664" level="INFO">${data} = 0</msg>
<var>${status}</var>
<var>${data}</var>
<arg>ScalarClosures.Run_Keyword_And_Collect_Garbage</arg>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:20:38.645125" elapsed="3.273562"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Getter failed: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:20:41.918935" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:20:41.918822" elapsed="0.000162"/>
</branch>
<status status="PASS" start="2026-04-18T03:20:41.918799" elapsed="0.000208"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:20:41.921136" level="INFO">${date_now} = 2026-04-18 03:20:41.921</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:20:41.920835" elapsed="0.000343"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:20:41.922020" level="INFO">${time_deadline} = 91.985</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:20:41.921409" elapsed="0.000656"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:20:41.923396" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:20:41.922302" elapsed="0.001188"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:20:41.924509" elapsed="0.000118"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:20:41.923803" elapsed="0.000912"/>
</branch>
<status status="PASS" start="2026-04-18T03:20:41.923733" elapsed="0.001042"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:20:41.919935" elapsed="0.004969"/>
</kw>
<msg time="2026-04-18T03:20:41.925127" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:20:41.925198" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:20:41.919198" elapsed="0.006036"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:20:41.925691" elapsed="0.000028"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:20:41.925492" elapsed="0.000295"/>
</branch>
<status status="PASS" start="2026-04-18T03:20:41.925461" elapsed="0.000372"/>
</if>
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_After_Replacing_First_Two_Arguments" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:20:41.929188" level="INFO">${keyword} = WaitUtils.Excluding_Stability_Safe_Stateful_Validator_As_Keyword</msg>
<msg time="2026-04-18T03:20:41.929260" level="INFO">${args} = [0, 0]</msg>
<msg time="2026-04-18T03:20:41.929326" level="INFO">${kwargs} = {'excluded_value': '0'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:20:41.928714" elapsed="0.000643"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>0</arg>
<arg>${arg1}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:20:41.929618" elapsed="0.000331"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>1</arg>
<arg>${arg2}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:20:41.930195" elapsed="0.000322"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Excluding_Stability_Safe_Stateful_Validator_As_Keyword" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:20:41.933607" level="INFO">${new_state} = 0</msg>
<var>${new_state}</var>
<arg>${data}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:20:41.932868" elapsed="0.000780"/>
</kw>
<if>
<branch type="IF" condition="${data} == ${excluded_value}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Got the excluded value.</value>
<status status="PASS" start="2026-04-18T03:20:41.934003" elapsed="0.000053"/>
</return>
<status status="PASS" start="2026-04-18T03:20:41.933753" elapsed="0.000381"/>
</branch>
<status status="PASS" start="2026-04-18T03:20:41.933724" elapsed="0.000471"/>
</if>
<if>
<branch type="IF" condition="${data} != ${old_state}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Data value has changed.</value>
<status status="NOT RUN" start="2026-04-18T03:20:41.934414" elapsed="0.000594"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:20:41.934329" elapsed="0.000781"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:20:41.934290" elapsed="0.000845"/>
</if>
<return>
<value>${new_state}</value>
<value>PASS</value>
<value>Validated stable: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:20:41.935170" elapsed="0.000016"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Report failure if got the excluded value or if data value changed from last time. Useful to become validator.</doc>
<status status="PASS" start="2026-04-18T03:20:41.931958" elapsed="0.003360"/>
</kw>
<msg time="2026-04-18T03:20:41.935411" level="INFO">${result} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:20:41.930802" elapsed="0.004636"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:20:41.935489" elapsed="0.000030"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure with replaced first two positional arguments.</doc>
<status status="PASS" start="2026-04-18T03:20:41.928085" elapsed="0.007550"/>
</kw>
<msg time="2026-04-18T03:20:41.935730" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:20:41.935776" level="INFO">${message} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:20:41.927167" elapsed="0.008633"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:20:41.935994" elapsed="0.044019"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:20:41.981151" elapsed="0.000045"/>
</return>
<status status="PASS" start="2026-04-18T03:20:41.981010" elapsed="0.000228"/>
</branch>
<status status="PASS" start="2026-04-18T03:20:41.980983" elapsed="0.000283"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:20:41.981455" elapsed="0.000025"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with [0, 'FAIL', 'Got the excluded value.'].</doc>
<status status="PASS" start="2026-04-18T03:20:41.980552" elapsed="0.001011"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:20:41.981610" elapsed="0.000028"/>
</return>
<msg time="2026-04-18T03:20:41.981792" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:20:41.981840" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:20:41.981880" level="INFO">${result} = Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>ScalarClosures.Run_Closure_After_Replacing_First_Two_Arguments</arg>
<arg>${safe_validator}</arg>
<arg>${state}</arg>
<arg>${data}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:20:41.926281" elapsed="0.055622"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Validator failed: ${result}</value>
<status status="PASS" start="2026-04-18T03:20:41.982137" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-18T03:20:41.982011" elapsed="0.000192"/>
</branch>
<status status="PASS" start="2026-04-18T03:20:41.981987" elapsed="0.000240"/>
</if>
<if>
<branch type="IF" condition="${sleeps_left} &lt;= 0">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:20:41.982334" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:20:41.982296" elapsed="0.000085"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:20:41.982275" elapsed="0.000128"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-18T03:20:41.982599" elapsed="0.000024"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:20:41.982797" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:20:41.982704" elapsed="0.000227"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:20:41.982688" elapsed="0.000268"/>
</if>
<kw name="Sleep" owner="BuiltIn">
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-04-18T03:20:41.983105" elapsed="0.000025"/>
</kw>
<var name="${sleeps_left}">0</var>
<status status="PASS" start="2026-04-18T03:20:38.644962" elapsed="3.338203"/>
</iter>
<var>${sleeps_left}</var>
<value>${count}-1</value>
<value>-1</value>
<value>-1</value>
<status status="PASS" start="2026-04-18T03:20:38.644452" elapsed="3.338752"/>
</for>
<kw name="Fail" owner="BuiltIn">
<arg>Logic error, we should have returned before.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:20:41.983380" elapsed="0.000023"/>
</kw>
<msg time="2026-04-18T03:20:41.983635" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:20:41.983681" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:20:41.983722" level="INFO">${result} = Validator failed: Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>count=${count}</arg>
<arg>getter=${getter}</arg>
<arg>safe_validator=${safe_validator}</arg>
<arg>initial_state=${state}</arg>
<doc>Pass only if consecutively 1 times in a row with 60 between attempts: ${getter} creates data and ${safe_validator} passes. Validator updates its state even if it reports failure. Always return validator state, status and message.</doc>
<status status="PASS" start="2026-04-18T03:20:38.633558" elapsed="3.350187"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:20:41.983945" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:20:41.983836" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-18T03:20:41.983818" elapsed="0.000195"/>
</if>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:20:41.985456" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:20:41.985564" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:20:41.985163" elapsed="0.000479">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:20:41.985747" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:20:41.985790" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:20:41.984743" elapsed="0.001070"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:20:41.986034" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:20:41.985890" elapsed="0.000198"/>
</branch>
<status status="PASS" start="2026-04-18T03:20:41.985869" elapsed="0.000245"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:20:41.986582" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:20:41.986272" elapsed="0.000345"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:20:41.989861" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:20:41.989937" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:20:41.987157" elapsed="0.002841">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:20:41.990104" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:20:41.990149" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:20:41.986811" elapsed="0.003361"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:20:41.990353" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-04-18T03:20:41.990245" elapsed="0.000312"/>
</branch>
<status status="PASS" start="2026-04-18T03:20:41.990226" elapsed="0.000358"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:20:41.990805" elapsed="0.000025"/>
</kw>
<arg>${result}</arg>
<arg>Not possible to succeed within the deadline.</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:20:41.984304" elapsed="0.006664"/>
</kw>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:20:41.992296" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:20:41.992373" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:20:41.992002" elapsed="0.000430">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:20:41.992550" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:20:41.992596" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:20:41.991657" elapsed="0.000962"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:20:41.992820" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:20:41.992701" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-04-18T03:20:41.992677" elapsed="0.000211"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:20:41.993301" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:20:41.993046" elapsed="0.000282"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:20:41.996291" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:20:41.996366" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:20:41.993857" elapsed="0.002568">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:20:41.996582" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:20:41.996628" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:20:41.993499" elapsed="0.003152"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:20:41.996837" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-18T03:20:41.996728" elapsed="0.000169"/>
</branch>
<status status="PASS" start="2026-04-18T03:20:41.996709" elapsed="0.000212"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:20:41.997071" elapsed="0.000021"/>
</kw>
<arg>${result}</arg>
<arg>Getter failed</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:20:41.991253" elapsed="0.005970"/>
</kw>
<kw name="Sleep" owner="BuiltIn">
<msg time="2026-04-18T03:21:41.998249" level="INFO">Slept 1 minute.</msg>
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="PASS" start="2026-04-18T03:20:41.997378" elapsed="60.001561"/>
</kw>
<var name="${try}">15</var>
<status status="PASS" start="2026-04-18T03:20:38.632122" elapsed="63.367009"/>
</iter>
<iter>
<kw name="Getter_And_Safe_Stateful_Validator_Have_To_Succeed_Consecutively_By_Deadline" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:21:42.005332" level="INFO">${result} = No result yet.</msg>
<var>${result}</var>
<arg>No result yet.</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:21:42.004205" elapsed="0.001203"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:21:42.006156" level="INFO">${state} = 0</msg>
<var>${state}</var>
<arg>${initial_state}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:21:42.005721" elapsed="0.000473"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:21:42.006972" level="INFO">${sleeps} = 0</msg>
<var>${sleeps}</var>
<arg>${count} - 1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:21:42.006430" elapsed="0.000625"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:21:42.009711" level="INFO">${date_now} = 2026-04-18 03:21:42.010</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:21:42.009423" elapsed="0.000328"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:21:42.010544" level="INFO">${time_deadline} = 31.896</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:21:42.009980" elapsed="0.000605"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:21:42.011439" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:21:42.010824" elapsed="0.000655"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:21:42.012003" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:21:42.011631" elapsed="0.000455"/>
</branch>
<status status="PASS" start="2026-04-18T03:21:42.011593" elapsed="0.000530"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:21:42.008042" elapsed="0.004155"/>
</kw>
<msg time="2026-04-18T03:21:42.012391" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:21:42.012457" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:21:42.007303" elapsed="0.005186"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:21:42.012784" elapsed="0.000041"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:21:42.012629" elapsed="0.000261"/>
</branch>
<status status="PASS" start="2026-04-18T03:21:42.012602" elapsed="0.000326"/>
</if>
<for flavor="IN RANGE">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_As_Is" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:21:42.017274" level="INFO">${keyword} = Get_Ipv4_Topology_Count</msg>
<msg time="2026-04-18T03:21:42.017374" level="INFO">${args} = []</msg>
<msg time="2026-04-18T03:21:42.017449" level="INFO">${kwargs} = {'session': 'operational', 'topology': 'example-ipv4-topology'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:21:42.016565" elapsed="0.000918"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Get_Ipv4_Topology_Count" owner="PrefixCounting">
<kw name="Get_Ipv4_Topology" owner="PrefixCounting">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:21:45.149235" level="INFO">GET Request : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01agv6blx930rdupfsp7wkuo902.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-18T03:21:45.166070" level="INFO">GET Response : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Transfer-Encoding': 'chunked'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xmlns="urn:opendaylight:params:xml:ns:yang:odl-bgp-topology-types"/&gt;&lt;/topology-types&gt;&lt;node&gt;&lt;node-id&gt;192.0.2.1&lt;/node-id&gt;&lt;igp-node-attributes xmlns="urn:TBD:params:xml:ns:yang:nt:l3-unicast-igp-topology"&gt;&lt;prefix&gt;&lt;prefix&gt;8.20.15.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.65.76.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.222.18.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.234.69.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.59.125.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.205.46.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.69.249.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.243.186.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.86.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.138.152.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.201.33.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.107.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.133.25.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.19.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.45.49.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.194.22.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.226.161.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.211.127.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.100.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.254.101.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.205.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.60.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.234.208.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.228.239.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.27.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.177.154.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.201.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.148.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.160.202.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.48.218.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.52.93.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.93.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.182.185.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.34.217.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.116.158.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.236.169.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.223.35.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.103.82.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.7.2.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.131.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.40.95.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.244.132.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.28.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.253.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.83.39.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.4.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.193.28.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.36.83.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.143.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.73.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.128.217.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.135.39.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.6.81.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.78.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.54.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.250.105.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.110.78.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.182.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.4.223.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.49.100.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.5.205.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.165.63.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.36.184.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.214.36.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.171.128.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.208.52.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.113.57.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.3.37.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.237.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.160.220.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.198.13.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.174.151.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.48.34.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.21.1.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.1.30.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.108.237.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.89.117.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.218.102.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.24.70.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.41.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.48.122.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.51.175.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.79.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.25.67.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.153.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.219.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.88.115.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.129.239.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.117.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.204.169.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.10.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.139.169.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.79.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.53.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.31.83.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.117.152.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.46.66.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.86.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.3.214.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.74.90.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.197.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.54.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.41.3.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.97.95.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.179.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.188.172.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.219.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.124.44.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.187.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.197.228.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.87.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.133.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.78.124.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.149.209.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.33.23.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.243.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.189.185.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.80.206.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.150.251.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.208.98.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.125.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.213.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.71.27.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.234.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.109.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.112.121.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.8.69.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.201.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.203.154.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.73.19.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.169.175.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.15.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.4.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.75.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.68.155.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.16.40.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.231.11.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.85.57.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.191.139.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.191.228.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.75.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.3.166.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.32.247.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.242.134.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.184.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.164.222.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.35.248.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.209.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.60.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.129.2.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.88.147.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.222.193.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.58.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.61.198.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.32.165.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.120.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.251.232.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.111.147.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.203.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.161.229.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.68.153.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.105.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.252.41.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.2.231.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.240.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.146.121.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.92.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.151.79.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.10.14.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.95.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.155.232.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.32.13.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.92.229.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.102.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.118.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.83.215.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.38.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.110.203.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.240.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.116.31.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.238.174.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.235.83.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.4.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.122.151.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.21.216.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.146.154.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.199.188.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.194.94.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.153.168.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.255.64.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.22.16/28&lt;/pref... (set the log level to DEBUG or TRACE to see the full content) 
 </msg>
<msg time="2026-04-18T03:21:45.166706" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${PC_NW_TOPOLOGY}=${topology}?content=nonconfig</arg>
<arg>expected_status=anything</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-18T03:21:42.020738" elapsed="3.146030"/>
</kw>
<if>
<branch type="IF" condition="${response.status_code} != 200">
<kw name="Fail" owner="BuiltIn">
<arg>Get on ${topology} returned status code ${response.status_code} with message: ${response.text}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:21:45.169783" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:21:45.166993" elapsed="0.002870"/>
</branch>
<status status="PASS" start="2026-04-18T03:21:45.166923" elapsed="0.002987"/>
</if>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-18T03:21:45.170010" elapsed="0.000076"/>
</return>
<msg time="2026-04-18T03:21:45.177082" level="INFO">${topology} = &lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xml...</msg>
<var>${topology}</var>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>GET the example-ipv4-topology data, check status is 200, return the topology data.</doc>
<status status="PASS" start="2026-04-18T03:21:42.019713" elapsed="3.157488"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:21:45.265495" level="INFO">${prefix_count} = 0</msg>
<var>${prefix_count}</var>
<arg>len(re.findall('"prefix":"', '''${topology}'''))</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:21:45.177581" elapsed="0.088033"/>
</kw>
<return>
<value>${prefix_count}</value>
<status status="PASS" start="2026-04-18T03:21:45.265742" elapsed="0.000058"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Get topology. If not fail, return number of prefixes in the topology.</doc>
<status status="PASS" start="2026-04-18T03:21:42.018208" elapsed="3.247870"/>
</kw>
<msg time="2026-04-18T03:21:45.266172" level="INFO">${result} = 0</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:21:42.017685" elapsed="3.248513"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:21:45.266249" elapsed="0.000027"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure without affecting arguments.</doc>
<status status="PASS" start="2026-04-18T03:21:42.015976" elapsed="3.250396"/>
</kw>
<msg time="2026-04-18T03:21:45.266468" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:21:45.266512" level="INFO">${message} = 0</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:21:42.015100" elapsed="3.251453"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:21:45.266777" elapsed="0.026991"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:21:45.294762" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-04-18T03:21:45.294626" elapsed="0.000205"/>
</branch>
<status status="PASS" start="2026-04-18T03:21:45.294602" elapsed="0.000254"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:21:45.295023" elapsed="0.000024"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with 0.</doc>
<status status="PASS" start="2026-04-18T03:21:45.294194" elapsed="0.000913"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:21:45.295150" elapsed="0.000026"/>
</return>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:21:42.014491" elapsed="3.280782"/>
</kw>
<msg time="2026-04-18T03:21:45.295369" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:21:45.295415" level="INFO">${data} = 0</msg>
<var>${status}</var>
<var>${data}</var>
<arg>ScalarClosures.Run_Keyword_And_Collect_Garbage</arg>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:21:42.013824" elapsed="3.281614"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Getter failed: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:21:45.295681" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:21:45.295513" elapsed="0.000218"/>
</branch>
<status status="PASS" start="2026-04-18T03:21:45.295496" elapsed="0.000257"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:21:45.297376" level="INFO">${date_now} = 2026-04-18 03:21:45.297</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:21:45.297205" elapsed="0.000199"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:21:45.297949" level="INFO">${time_deadline} = 28.609</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:21:45.297576" elapsed="0.000399"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:21:45.298597" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:21:45.298142" elapsed="0.000485"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:21:45.298953" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:21:45.298700" elapsed="0.000308"/>
</branch>
<status status="PASS" start="2026-04-18T03:21:45.298680" elapsed="0.000351"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:21:45.296578" elapsed="0.002500"/>
</kw>
<msg time="2026-04-18T03:21:45.299176" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:21:45.299221" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:21:45.295912" elapsed="0.003332"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:21:45.299546" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:21:45.299404" elapsed="0.000197"/>
</branch>
<status status="PASS" start="2026-04-18T03:21:45.299385" elapsed="0.000238"/>
</if>
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_After_Replacing_First_Two_Arguments" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:21:45.301586" level="INFO">${keyword} = WaitUtils.Excluding_Stability_Safe_Stateful_Validator_As_Keyword</msg>
<msg time="2026-04-18T03:21:45.301635" level="INFO">${args} = [0, 0]</msg>
<msg time="2026-04-18T03:21:45.301680" level="INFO">${kwargs} = {'excluded_value': '0'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:21:45.301265" elapsed="0.000437"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>0</arg>
<arg>${arg1}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:21:45.301865" elapsed="0.000206"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>1</arg>
<arg>${arg2}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:21:45.302230" elapsed="0.000188"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Excluding_Stability_Safe_Stateful_Validator_As_Keyword" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:21:45.304183" level="INFO">${new_state} = 0</msg>
<var>${new_state}</var>
<arg>${data}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:21:45.303782" elapsed="0.000428"/>
</kw>
<if>
<branch type="IF" condition="${data} == ${excluded_value}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Got the excluded value.</value>
<status status="PASS" start="2026-04-18T03:21:45.304448" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-18T03:21:45.304280" elapsed="0.000236"/>
</branch>
<status status="PASS" start="2026-04-18T03:21:45.304262" elapsed="0.000297"/>
</if>
<if>
<branch type="IF" condition="${data} != ${old_state}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Data value has changed.</value>
<status status="NOT RUN" start="2026-04-18T03:21:45.304651" elapsed="0.000149"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:21:45.304616" elapsed="0.000221"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:21:45.304600" elapsed="0.000260"/>
</if>
<return>
<value>${new_state}</value>
<value>PASS</value>
<value>Validated stable: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:21:45.304892" elapsed="0.000015"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Report failure if got the excluded value or if data value changed from last time. Useful to become validator.</doc>
<status status="PASS" start="2026-04-18T03:21:45.303279" elapsed="0.001733"/>
</kw>
<msg time="2026-04-18T03:21:45.305096" level="INFO">${result} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:21:45.302598" elapsed="0.002524"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:21:45.305171" elapsed="0.000027"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure with replaced first two positional arguments.</doc>
<status status="PASS" start="2026-04-18T03:21:45.300873" elapsed="0.004418"/>
</kw>
<msg time="2026-04-18T03:21:45.305384" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:21:45.305430" level="INFO">${message} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:21:45.300316" elapsed="0.005138"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:21:45.305637" elapsed="0.025764"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:21:45.332402" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-04-18T03:21:45.332270" elapsed="0.000199"/>
</branch>
<status status="PASS" start="2026-04-18T03:21:45.332247" elapsed="0.000247"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:21:45.332675" elapsed="0.000023"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with [0, 'FAIL', 'Got the excluded value.'].</doc>
<status status="PASS" start="2026-04-18T03:21:45.331859" elapsed="0.000899"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:21:45.332802" elapsed="0.000026"/>
</return>
<msg time="2026-04-18T03:21:45.332970" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:21:45.333017" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:21:45.333057" level="INFO">${result} = Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>ScalarClosures.Run_Closure_After_Replacing_First_Two_Arguments</arg>
<arg>${safe_validator}</arg>
<arg>${state}</arg>
<arg>${data}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:21:45.299855" elapsed="0.033225"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Validator failed: ${result}</value>
<status status="PASS" start="2026-04-18T03:21:45.333266" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-04-18T03:21:45.333161" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-04-18T03:21:45.333144" elapsed="0.000208"/>
</if>
<if>
<branch type="IF" condition="${sleeps_left} &lt;= 0">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:21:45.333441" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:21:45.333406" elapsed="0.000081"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:21:45.333390" elapsed="0.000119"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-18T03:21:45.333686" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:21:45.333820" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:21:45.333785" elapsed="0.000152"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:21:45.333769" elapsed="0.000193"/>
</if>
<kw name="Sleep" owner="BuiltIn">
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-04-18T03:21:45.334104" elapsed="0.000021"/>
</kw>
<var name="${sleeps_left}">0</var>
<status status="PASS" start="2026-04-18T03:21:42.013608" elapsed="3.320551"/>
</iter>
<var>${sleeps_left}</var>
<value>${count}-1</value>
<value>-1</value>
<value>-1</value>
<status status="PASS" start="2026-04-18T03:21:42.012991" elapsed="3.321204"/>
</for>
<kw name="Fail" owner="BuiltIn">
<arg>Logic error, we should have returned before.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:21:45.334348" elapsed="0.000021"/>
</kw>
<msg time="2026-04-18T03:21:45.334588" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:21:45.334634" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:21:45.334676" level="INFO">${result} = Validator failed: Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>count=${count}</arg>
<arg>getter=${getter}</arg>
<arg>safe_validator=${safe_validator}</arg>
<arg>initial_state=${state}</arg>
<doc>Pass only if consecutively 1 times in a row with 60 between attempts: ${getter} creates data and ${safe_validator} passes. Validator updates its state even if it reports failure. Always return validator state, status and message.</doc>
<status status="PASS" start="2026-04-18T03:21:42.001698" elapsed="3.333001"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:21:45.334891" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:21:45.334787" elapsed="0.000148"/>
</branch>
<status status="PASS" start="2026-04-18T03:21:45.334769" elapsed="0.000188"/>
</if>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:21:45.336466" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:21:45.336568" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:21:45.336106" elapsed="0.000533">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:21:45.336741" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:21:45.336783" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:21:45.335680" elapsed="0.001126"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:21:45.336986" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:21:45.336879" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-04-18T03:21:45.336861" elapsed="0.000191"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:21:45.337577" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:21:45.337201" elapsed="0.000407"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:21:45.340749" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:21:45.340826" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:21:45.338122" elapsed="0.002765">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:21:45.340991" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:21:45.341034" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:21:45.337780" elapsed="0.003277"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:21:45.341239" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-04-18T03:21:45.341133" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-04-18T03:21:45.341113" elapsed="0.000209"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:21:45.341470" elapsed="0.000021"/>
</kw>
<arg>${result}</arg>
<arg>Not possible to succeed within the deadline.</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:21:45.335274" elapsed="0.006363"/>
</kw>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:21:45.342915" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:21:45.342989" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:21:45.342654" elapsed="0.000424">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:21:45.343178" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:21:45.343222" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:21:45.342295" elapsed="0.000950"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:21:45.343425" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:21:45.343319" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-04-18T03:21:45.343300" elapsed="0.000192"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:21:45.343909" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:21:45.343662" elapsed="0.000275"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:21:45.346840" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:21:45.346912" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:21:45.344436" elapsed="0.002564">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:21:45.347141" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:21:45.347186" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:21:45.344101" elapsed="0.003108"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:21:45.347393" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-04-18T03:21:45.347285" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-04-18T03:21:45.347265" elapsed="0.000212"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:21:45.347648" elapsed="0.000022"/>
</kw>
<arg>${result}</arg>
<arg>Getter failed</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:21:45.341918" elapsed="0.005883"/>
</kw>
<kw name="Sleep" owner="BuiltIn">
<msg time="2026-04-18T03:22:45.348492" level="INFO">Slept 1 minute.</msg>
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="PASS" start="2026-04-18T03:21:45.347954" elapsed="60.000746"/>
</kw>
<var name="${try}">16</var>
<status status="PASS" start="2026-04-18T03:21:41.999914" elapsed="63.348865"/>
</iter>
<iter>
<kw name="Getter_And_Safe_Stateful_Validator_Have_To_Succeed_Consecutively_By_Deadline" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:22:45.351797" level="INFO">${result} = No result yet.</msg>
<var>${result}</var>
<arg>No result yet.</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:22:45.351321" elapsed="0.000515"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:22:45.352467" level="INFO">${state} = 0</msg>
<var>${state}</var>
<arg>${initial_state}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:22:45.352065" elapsed="0.000438"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:22:45.353433" level="INFO">${sleeps} = 0</msg>
<var>${sleeps}</var>
<arg>${count} - 1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:22:45.352790" elapsed="0.000681"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:22:45.357169" level="INFO">${date_now} = 2026-04-18 03:22:45.357</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:22:45.356749" elapsed="0.000487"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:22:45.358647" level="INFO">${time_deadline} = -31.451</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:22:45.357659" elapsed="0.001058"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:22:45.359698" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:22:45.359211" elapsed="0.000515"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-18T03:22:45.360535" level="FAIL">Not possible to succeed within the deadline. Last result: No result yet.</msg>
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-18T03:22:45.360107" elapsed="0.000510">Not possible to succeed within the deadline. Last result: No result yet.</status>
</kw>
<status status="FAIL" start="2026-04-18T03:22:45.359814" elapsed="0.000875">Not possible to succeed within the deadline. Last result: No result yet.</status>
</branch>
<status status="FAIL" start="2026-04-18T03:22:45.359784" elapsed="0.000941">Not possible to succeed within the deadline. Last result: No result yet.</status>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="FAIL" start="2026-04-18T03:22:45.354665" elapsed="0.006162">Not possible to succeed within the deadline. Last result: No result yet.</status>
</kw>
<msg time="2026-04-18T03:22:45.360944" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:22:45.360989" level="INFO">${message} = Not possible to succeed within the deadline. Last result: No result yet.</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:22:45.353735" elapsed="0.007278"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:22:45.361222" elapsed="0.000031"/>
</return>
<status status="PASS" start="2026-04-18T03:22:45.361105" elapsed="0.000189"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:45.361083" elapsed="0.000236"/>
</if>
<for flavor="IN RANGE">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${data}</var>
<arg>ScalarClosures.Run_Keyword_And_Collect_Garbage</arg>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:45.361834" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Getter failed: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:22:45.361976" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:22:45.361938" elapsed="0.000085"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:22:45.361921" elapsed="0.000131"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:45.362211" elapsed="0.000023"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:22:45.362347" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:22:45.362312" elapsed="0.000080"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:22:45.362295" elapsed="0.000119"/>
</if>
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>ScalarClosures.Run_Closure_After_Replacing_First_Two_Arguments</arg>
<arg>${safe_validator}</arg>
<arg>${state}</arg>
<arg>${data}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:45.362788" elapsed="0.000028"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Validator failed: ${result}</value>
<status status="NOT RUN" start="2026-04-18T03:22:45.362935" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:22:45.362898" elapsed="0.000082"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:22:45.362881" elapsed="0.000121"/>
</if>
<if>
<branch type="IF" condition="${sleeps_left} &lt;= 0">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:22:45.363087" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:22:45.363052" elapsed="0.000080"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:22:45.363038" elapsed="0.000115"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:45.363303" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:22:45.363435" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:22:45.363401" elapsed="0.000079"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:22:45.363385" elapsed="0.000124"/>
</if>
<kw name="Sleep" owner="BuiltIn">
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:45.363682" elapsed="0.000022"/>
</kw>
<var name="${sleeps_left}"/>
<status status="NOT RUN" start="2026-04-18T03:22:45.361662" elapsed="0.002074"/>
</iter>
<var>${sleeps_left}</var>
<value>${count}-1</value>
<value>-1</value>
<value>-1</value>
<status status="NOT RUN" start="2026-04-18T03:22:45.361364" elapsed="0.002401"/>
</for>
<kw name="Fail" owner="BuiltIn">
<arg>Logic error, we should have returned before.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:45.363919" elapsed="0.000021"/>
</kw>
<msg time="2026-04-18T03:22:45.364146" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:22:45.364192" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:22:45.364233" level="INFO">${result} = Not possible to succeed within the deadline. Last result: No result yet.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>count=${count}</arg>
<arg>getter=${getter}</arg>
<arg>safe_validator=${safe_validator}</arg>
<arg>initial_state=${state}</arg>
<doc>Pass only if consecutively 1 times in a row with 60 between attempts: ${getter} creates data and ${safe_validator} passes. Validator updates its state even if it reports failure. Always return validator state, status and message.</doc>
<status status="PASS" start="2026-04-18T03:22:45.350050" elapsed="0.014207"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:22:45.364456" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:22:45.364345" elapsed="0.000160"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:45.364327" elapsed="0.000244"/>
</if>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:22:45.365949" level="INFO">Length is 72.</msg>
<msg time="2026-04-18T03:22:45.366035" level="FAIL">'Not possible to succeed within the deadline. Last result: No result yet.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:22:45.365665" elapsed="0.000436">'Not possible to succeed within the deadline. Last result: No result yet.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:22:45.366203" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:22:45.366246" level="INFO">${result} = 'Not possible to succeed within the deadline. Last result: No result yet.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:22:45.365278" elapsed="0.000991"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:22:45.366456" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:22:45.366344" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:45.366325" elapsed="0.000218"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:22:45.366986" level="INFO">@{message_chunks} = [  |  Last result: No result yet. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:22:45.366726" elapsed="0.000287"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:22:45.370461" level="INFO">Length is 0.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="PASS" start="2026-04-18T03:22:45.367516" elapsed="0.003050"/>
</kw>
<msg time="2026-04-18T03:22:45.370693" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:22:45.370737" level="INFO">${result} = None</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:22:45.367179" elapsed="0.003581"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="NOT RUN" start="2026-04-18T03:22:45.370974" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:22:45.370853" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:45.370826" elapsed="0.000223"/>
</if>
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-18T03:22:45.371826" level="FAIL">Not possible to succeed within the deadline. Last result: No result yet.</msg>
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-18T03:22:45.371300" elapsed="0.000625">Not possible to succeed within the deadline. Last result: No result yet.</status>
</kw>
<arg>${result}</arg>
<arg>Not possible to succeed within the deadline.</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="FAIL" start="2026-04-18T03:22:45.364863" elapsed="0.007220">Not possible to succeed within the deadline. Last result: No result yet.</status>
</kw>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<arg>${result}</arg>
<arg>Getter failed</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:45.372609" elapsed="0.000127"/>
</kw>
<kw name="Sleep" owner="BuiltIn">
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:45.372977" elapsed="0.000031"/>
</kw>
<var name="${try}">17</var>
<status status="FAIL" start="2026-04-18T03:22:45.349109" elapsed="0.023975">Not possible to succeed within the deadline. Last result: No result yet.</status>
</iter>
<var>${try}</var>
<value>1</value>
<value>${maximum_sleeps}+2</value>
<status status="FAIL" start="2026-04-18T03:05:53.909465" elapsed="1011.463709">Not possible to succeed within the deadline. Last result: No result yet.</status>
</for>
<kw name="Fail" owner="BuiltIn">
<arg>Logic error, we should have returned before.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:45.373424" elapsed="0.000031"/>
</kw>
<var>${result}</var>
<arg>timeout=${timeout}</arg>
<arg>period=${period}</arg>
<arg>count=${repetitions}</arg>
<arg>getter=${getter}</arg>
<arg>safe_validator=${validator}</arg>
<arg>initial_state=${excluded_count}</arg>
<doc>Analogue of Wait Until Keyword Succeeds, but it passes state of validator around and exits early on getter failure. Calls GASSVHTSCBD to verify data is "stable".</doc>
<status status="FAIL" start="2026-04-18T03:05:53.901633" elapsed="1011.471974">Not possible to succeed within the deadline. Last result: No result yet.</status>
</kw>
<return>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:22:45.373712" elapsed="0.000025"/>
</return>
<arg>timeout=${bgp_filling_timeout}</arg>
<arg>period=${CHECK_PERIOD_PREFIX_COUNT_SINGLE}</arg>
<arg>repetitions=${REPETITIONS_PREFIX_COUNT_SINGLE}</arg>
<arg>excluded_count=0</arg>
<doc>Each ${period} get prefix count. When called with shard list, the check is done before the count is get. After 1 of stable different from ${excluded_count} within ${timeout}, Return validator output. Fail early on getter error.</doc>
<status status="FAIL" start="2026-04-18T03:05:53.892500" elapsed="1011.481353">Not possible to succeed within the deadline. Last result: No result yet.</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-04-18T03:22:45.375692" 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-04-18T03:22:45.375353" elapsed="0.000384"/>
</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-04-18T03:22:45.374897" elapsed="0.000893"/>
</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-04-18T03:22:45.376669" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:22:45.376246" elapsed="0.000485"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:45.376227" elapsed="0.000529"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>'${SetupUtils__Known_Bug_ID}' != ''</arg>
<arg>Set_Known_Bug_Id</arg>
<arg>${EMPTY}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:22:45.376905" elapsed="0.000333"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:22:45.382360" level="INFO">${test_skipped} = False</msg>
<var>${test_skipped}</var>
<arg>len(re.findall('SKIPPED', """${TEST_MESSAGE}""")) &gt; 0</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:22:45.381887" elapsed="0.000505"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="NOT RUN" start="2026-04-18T03:22:45.382666" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:22:45.382486" elapsed="0.000225"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:45.382463" elapsed="0.000270"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:22:45.383191" level="INFO">${newline} = 
</msg>
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:22:45.382884" elapsed="0.000333"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-18T03:22:45.383658" level="INFO">${reference} = bgpcep_bgp_ingest_mixed_txt_Singlepeer_Prefixcount_Wait_For_Stable_Talking_Ipv4_Topology</msg>
<var>${reference}</var>
<arg>${SUITE_NAME}_${TEST_NAME}</arg>
<arg>[ /\.-]</arg>
<arg>_</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-18T03:22:45.383377" elapsed="0.000307"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<msg time="2026-04-18T03:22:45.384026" level="INFO">${reference} = bgpcep_bgp_ingest_mixed_txt_singlepeer_prefixcount_wait_for_stable_talking_ipv4_topology</msg>
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="PASS" start="2026-04-18T03:22:45.383844" elapsed="0.000208"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:22:45.384571" level="INFO">${msg} = ... click for list of related bugs or create a new one if needed (with the
"bgpcep_bgp_ingest_mixed_txt_singlepeer_prefixcount_wait_for_stable_talking_ipv4_topology"
reference somewhere inside)</msg>
<var>${msg}</var>
<arg>... click for list of related bugs or create a new one if needed (with the${newline}"${reference}"${newline}reference somewhere inside)</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:22:45.384207" elapsed="0.000392"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:22:45.385067" level="INFO">${bugs} = "https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=bgpcep_bgp_ingest_mixed_txt_singlepeer_prefixcount_wait_for_stable_talking_ipv4_topology&amp;order=bug_status"</msg>
<var>${bugs}</var>
<arg>"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=${reference}&amp;order=bug_status"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:22:45.384756" elapsed="0.000339"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<msg time="2026-04-18T03:22:45.385716" level="INFO">Set test message to:
... click for list of related bugs or create a new one if needed (with the
"bgpcep_bgp_ingest_mixed_txt_singlepeer_prefixcount_wait_for_stable_talking_ipv4_topology"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=bgpcep_bgp_ingest_mixed_txt_singlepeer_prefixcount_wait_for_stable_talking_ipv4_topology&amp;order=bug_status"

Not possible to succeed within the deadline. Last result: No result yet.</msg>
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="PASS" start="2026-04-18T03:22:45.385251" elapsed="0.000586"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:22:45.386383" level="INFO">... click for list of related bugs or create a new one if needed (with the
"bgpcep_bgp_ingest_mixed_txt_singlepeer_prefixcount_wait_for_stable_talking_ipv4_topology"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=bgpcep_bgp_ingest_mixed_txt_singlepeer_prefixcount_wait_for_stable_talking_ipv4_topology&amp;order=bug_status"</msg>
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:22:45.386002" 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-04-18T03:22:45.381514" elapsed="0.004978"/>
</kw>
<status status="PASS" start="2026-04-18T03:22:45.376025" elapsed="0.010547"/>
</kw>
<doc>Test case teardown. Show linked bugs and start fast failing in case of failure.</doc>
<status status="PASS" start="2026-04-18T03:22:45.374326" elapsed="0.012290"/>
</kw>
<doc>Wait until example-ipv4-topology becomes stable. This is done by checking stability of prefix count.</doc>
<status status="FAIL" start="2026-04-18T03:05:53.771134" elapsed="1011.615531">... click for list of related bugs or create a new one if needed (with the
"bgpcep_bgp_ingest_mixed_txt_singlepeer_prefixcount_wait_for_stable_talking_ipv4_topology"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=bgpcep_bgp_ingest_mixed_txt_singlepeer_prefixcount_wait_for_stable_talking_ipv4_topology&amp;order=bug_status"

Not possible to succeed within the deadline. Last result: No result yet.</status>
</test>
<test id="s1-s2-t5" name="Check_Talking_Ipv4_Topology_Count" 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-04-18T03:22:45.390800" elapsed="0.000235"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-18T03:22:45.390285" elapsed="0.000812"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:22:45.392177" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:22:45.392046" elapsed="0.000181"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:45.392023" elapsed="0.000226"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:22:45.397166" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:22:45.397019" elapsed="0.000199"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:45.396999" elapsed="0.000242"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-18T03:22:45.398314" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-18T03:22:45.397878" elapsed="0.000464"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-18T03:22:45.398833" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-18T03:22:45.398506" elapsed="0.000353"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-18T03:22:45.398904" elapsed="0.000036"/>
</return>
<msg time="2026-04-18T03:22:45.399072" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-18T03:22:45.397479" elapsed="0.001621"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:22:45.404673" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:22:45.404555" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:45.404520" 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-04-18T03:22:45.405988" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:22:45.405876" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:45.405853" elapsed="0.000205"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-18T03:22:45.406563" level="INFO">${karaf_connection_index} = 4</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-18T03:22:45.406208" elapsed="0.000390"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-18T03:22:45.407110" level="INFO">${current_connection_index} = 7</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:22:45.406811" elapsed="0.000335"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-18T03:22:45.501032" 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 "b "g "p "c "e "p "- "b "g "p "- "i "n "g "e "s "t "[78C- "[A[78Cm</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-18T03:22:45.407855" elapsed="0.093415"/>
</kw>
<msg time="2026-04-18T03:22:45.501550" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-18T03:22:45.501603" 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 "b "g "p "c "e "p "- "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:22:45.407369" elapsed="0.094295"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-18T03:22:45.568267" level="INFO">"i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "C "h "e "c "k "_ "T "a "l "k "i "n "g "_ "I "p "v "4 "_ "T "o "p "o "l "o "g "y "_ "C "o "u "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-04-18T03:22:45.502755" elapsed="0.065828"/>
</kw>
<msg time="2026-04-18T03:22:45.568872" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-18T03:22:45.568946" level="INFO">${message_wait} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "C "h "e "c "k "_ "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-04-18T03:22:45.502042" elapsed="0.066961"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:45.569501" elapsed="0.000042"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:22:45.569160" elapsed="0.000424"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:45.569112" elapsed="0.000501"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:22:45.570154" level="INFO"> "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "C "h "e "c "k "_ "T "a "l "k "i "n "g "_ "I "p "v "4 "_ "T "o "p "o "l "o "g "y "_ "C "o "u "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-04-18T03:22:45.569769" elapsed="0.000464"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:45.570585" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:22:45.570304" elapsed="0.000342"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:45.570284" elapsed="0.000386"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-18T03:22:45.570709" elapsed="0.000038"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:22:45.573895" elapsed="0.000170"/>
</kw>
<msg time="2026-04-18T03:22:45.574137" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:22:45.572445" elapsed="0.001847"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:45.574685" elapsed="0.000093"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:45.575279" elapsed="0.000097"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-18T03:22:45.571699" elapsed="0.003810"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-18T03:22:45.571038" elapsed="0.004563"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-18T03:22:45.405522" elapsed="0.170192"/>
</kw>
<msg time="2026-04-18T03:22:45.575822" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:22:45.575872" level="INFO">${message} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "C "h "e "c "k "_ "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-04-18T03:22:45.404899" elapsed="0.171018"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:22:45.576133" elapsed="0.000030"/>
</return>
<status status="PASS" start="2026-04-18T03:22:45.576005" elapsed="0.000195"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:45.575983" elapsed="0.000245"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:45.576718" elapsed="0.000028"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:45.577123" elapsed="0.000028"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:22:45.577203" elapsed="0.000018"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-18T03:22:45.404188" elapsed="0.173138"/>
</kw>
<msg time="2026-04-18T03:22:45.577433" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:22:45.577484" level="INFO">${output} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "C "h "e "c "k "_ "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-04-18T03:22:45.399482" elapsed="0.178069"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:45.577934" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:22:45.577641" elapsed="0.000405"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:45.577621" elapsed="0.000456"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-18T03:22:45.399333" elapsed="0.178773"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-18T03:22:45.399157" elapsed="0.178987"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-18T03:22:45.396613" elapsed="0.181596"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-18T03:22:45.391746" elapsed="0.186528"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:22:45.391269" elapsed="0.187058"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-18T03:22:45.387561" elapsed="0.190840"/>
</kw>
<kw name="Check_Ipv4_Topology_Count" owner="PrefixCounting">
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get_Ipv4_Topology_Count" owner="PrefixCounting">
<kw name="Get_Ipv4_Topology" owner="PrefixCounting">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:22:48.647899" level="INFO">GET Request : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01agv6blx930rdupfsp7wkuo902.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-18T03:22:48.653413" level="INFO">GET Response : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Transfer-Encoding': 'chunked'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xmlns="urn:opendaylight:params:xml:ns:yang:odl-bgp-topology-types"/&gt;&lt;/topology-types&gt;&lt;node&gt;&lt;node-id&gt;192.0.2.1&lt;/node-id&gt;&lt;igp-node-attributes xmlns="urn:TBD:params:xml:ns:yang:nt:l3-unicast-igp-topology"&gt;&lt;prefix&gt;&lt;prefix&gt;8.20.15.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.65.76.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.222.18.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.234.69.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.59.125.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.205.46.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.69.249.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.243.186.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.86.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.138.152.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.201.33.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.107.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.133.25.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.19.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.45.49.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.194.22.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.226.161.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.211.127.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.100.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.254.101.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.205.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.60.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.234.208.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.228.239.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.27.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.177.154.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.201.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.148.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.160.202.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.48.218.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.52.93.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.93.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.182.185.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.34.217.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.116.158.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.236.169.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.223.35.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.103.82.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.7.2.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.131.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.40.95.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.244.132.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.28.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.253.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.83.39.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.4.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.193.28.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.36.83.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.143.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.73.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.128.217.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.135.39.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.6.81.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.78.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.54.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.250.105.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.110.78.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.182.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.4.223.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.49.100.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.5.205.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.165.63.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.36.184.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.214.36.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.171.128.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.208.52.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.113.57.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.3.37.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.237.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.160.220.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.198.13.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.174.151.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.48.34.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.21.1.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.1.30.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.108.237.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.89.117.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.218.102.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.24.70.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.41.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.48.122.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.51.175.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.79.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.25.67.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.153.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.219.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.88.115.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.129.239.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.117.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.204.169.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.10.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.139.169.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.79.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.53.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.31.83.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.117.152.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.46.66.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.86.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.3.214.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.74.90.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.197.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.54.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.41.3.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.97.95.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.179.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.188.172.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.219.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.124.44.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.187.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.197.228.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.87.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.133.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.78.124.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.149.209.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.33.23.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.243.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.189.185.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.80.206.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.150.251.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.208.98.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.125.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.213.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.71.27.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.234.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.109.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.112.121.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.8.69.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.201.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.203.154.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.73.19.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.169.175.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.15.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.4.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.75.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.68.155.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.16.40.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.231.11.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.85.57.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.191.139.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.191.228.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.75.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.3.166.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.32.247.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.242.134.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.184.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.164.222.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.35.248.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.209.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.60.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.129.2.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.88.147.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.222.193.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.58.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.61.198.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.32.165.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.120.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.251.232.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.111.147.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.203.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.161.229.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.68.153.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.105.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.252.41.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.2.231.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.240.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.146.121.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.92.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.151.79.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.10.14.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.95.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.155.232.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.32.13.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.92.229.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.102.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.118.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.83.215.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.38.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.110.203.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.240.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.116.31.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.238.174.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.235.83.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.4.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.122.151.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.21.216.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.146.154.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.199.188.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.194.94.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.153.168.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.255.64.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.22.16/28&lt;/pref... (set the log level to DEBUG or TRACE to see the full content) 
 </msg>
<msg time="2026-04-18T03:22:48.653934" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${PC_NW_TOPOLOGY}=${topology}?content=nonconfig</arg>
<arg>expected_status=anything</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-18T03:22:45.581441" elapsed="3.072524"/>
</kw>
<if>
<branch type="IF" condition="${response.status_code} != 200">
<kw name="Fail" owner="BuiltIn">
<arg>Get on ${topology} returned status code ${response.status_code} with message: ${response.text}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:48.656860" elapsed="0.000061"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:22:48.654098" elapsed="0.002860"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:48.654064" elapsed="0.002921"/>
</if>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-18T03:22:48.657026" elapsed="0.000039"/>
</return>
<msg time="2026-04-18T03:22:48.663934" level="INFO">${topology} = &lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xml...</msg>
<var>${topology}</var>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>GET the example-ipv4-topology data, check status is 200, return the topology data.</doc>
<status status="PASS" start="2026-04-18T03:22:45.580956" elapsed="3.083040"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:22:48.760940" level="INFO">${prefix_count} = 0</msg>
<var>${prefix_count}</var>
<arg>len(re.findall('"prefix":"', '''${topology}'''))</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:22:48.664313" elapsed="0.096711"/>
</kw>
<return>
<value>${prefix_count}</value>
<status status="PASS" start="2026-04-18T03:22:48.761145" elapsed="0.000077"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Get topology. If not fail, return number of prefixes in the topology.</doc>
<status status="PASS" start="2026-04-18T03:22:45.580342" elapsed="3.181071"/>
</kw>
<msg time="2026-04-18T03:22:48.761599" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:22:48.761671" level="INFO">${message} = 0</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:22:45.579786" elapsed="3.181921"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:22:48.762017" elapsed="0.035548"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:22:48.798628" elapsed="0.000037"/>
</return>
<status status="PASS" start="2026-04-18T03:22:48.798470" elapsed="0.000231"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:48.798444" elapsed="0.000282"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:48.798897" elapsed="0.000024"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with 0.</doc>
<status status="PASS" start="2026-04-18T03:22:48.798041" elapsed="0.000962"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:22:48.799051" elapsed="0.000028"/>
</return>
<msg time="2026-04-18T03:22:48.799214" level="INFO">${actual_count} = 0</msg>
<var>${actual_count}</var>
<arg>Get_Ipv4_Topology_Count</arg>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:22:45.579218" elapsed="3.220024"/>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<msg time="2026-04-18T03:22:48.799778" level="INFO">Argument types are:
&lt;class 'int'&gt;
&lt;class 'str'&gt;</msg>
<msg time="2026-04-18T03:22:48.799882" level="FAIL">0 != 250000</msg>
<arg>${actual_count}</arg>
<arg>${expected_count}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="FAIL" start="2026-04-18T03:22:48.799408" elapsed="0.000546">0 != 250000</status>
</kw>
<arg>${COUNT_PREFIX_COUNT_SINGLE}</arg>
<doc>Check that the count of prefixes matches the expected count. Fails if it does not. In either case, collect garbage.</doc>
<status status="FAIL" start="2026-04-18T03:22:45.578695" elapsed="3.221366">0 != 250000</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-04-18T03:22:48.801421" 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-04-18T03:22:48.801102" elapsed="0.000372"/>
</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-04-18T03:22:48.800721" elapsed="0.000847"/>
</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-04-18T03:22:48.802423" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:22:48.802032" elapsed="0.000453"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:48.802012" 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-04-18T03:22:48.802682" elapsed="0.000362"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:22:48.808248" level="INFO">${test_skipped} = False</msg>
<var>${test_skipped}</var>
<arg>len(re.findall('SKIPPED', """${TEST_MESSAGE}""")) &gt; 0</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:22:48.807805" elapsed="0.000473"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="NOT RUN" start="2026-04-18T03:22:48.808511" elapsed="0.000031"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:22:48.808363" elapsed="0.000208"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:48.808342" elapsed="0.000251"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:22:48.809046" level="INFO">${newline} = 
</msg>
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:22:48.808743" elapsed="0.000330"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-18T03:22:48.809595" level="INFO">${reference} = bgpcep_bgp_ingest_mixed_txt_Singlepeer_Prefixcount_Check_Talking_Ipv4_Topology_Count</msg>
<var>${reference}</var>
<arg>${SUITE_NAME}_${TEST_NAME}</arg>
<arg>[ /\.-]</arg>
<arg>_</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-18T03:22:48.809233" elapsed="0.000389"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<msg time="2026-04-18T03:22:48.809963" level="INFO">${reference} = bgpcep_bgp_ingest_mixed_txt_singlepeer_prefixcount_check_talking_ipv4_topology_count</msg>
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="PASS" start="2026-04-18T03:22:48.809785" elapsed="0.000205"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:22:48.810504" level="INFO">${msg} = ... click for list of related bugs or create a new one if needed (with the
"bgpcep_bgp_ingest_mixed_txt_singlepeer_prefixcount_check_talking_ipv4_topology_count"
reference somewhere inside)</msg>
<var>${msg}</var>
<arg>... click for list of related bugs or create a new one if needed (with the${newline}"${reference}"${newline}reference somewhere inside)</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:22:48.810146" elapsed="0.000400"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:22:48.811044" level="INFO">${bugs} = "https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=bgpcep_bgp_ingest_mixed_txt_singlepeer_prefixcount_check_talking_ipv4_topology_count&amp;order=bug_status"</msg>
<var>${bugs}</var>
<arg>"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=${reference}&amp;order=bug_status"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:22:48.810707" elapsed="0.000367"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<msg time="2026-04-18T03:22:48.811742" level="INFO">Set test message to:
... click for list of related bugs or create a new one if needed (with the
"bgpcep_bgp_ingest_mixed_txt_singlepeer_prefixcount_check_talking_ipv4_topology_count"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=bgpcep_bgp_ingest_mixed_txt_singlepeer_prefixcount_check_talking_ipv4_topology_count&amp;order=bug_status"

0 != 250000</msg>
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="PASS" start="2026-04-18T03:22:48.811239" elapsed="0.000561"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:22:48.812271" level="INFO">... click for list of related bugs or create a new one if needed (with the
"bgpcep_bgp_ingest_mixed_txt_singlepeer_prefixcount_check_talking_ipv4_topology_count"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=bgpcep_bgp_ingest_mixed_txt_singlepeer_prefixcount_check_talking_ipv4_topology_count&amp;order=bug_status"</msg>
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:22:48.811967" elapsed="0.000355"/>
</kw>
<doc>Report that a test failed and point to linked Bugzilla bug(s).
Linked bugs must contain the ${reference} inside comments (workaround
becasue of currently missing suitable field for external references and
not correctly working the CONTENT MATCHES filter).
Not FAILED (incl. SKIPPED) test are not reported.
This keyword must be used in the [Teardown] setting of the affected test
or as the first line of the test if FastFail module is not being
used. It reports the URL of the bug on console and also puts it
into the Robot log file.</doc>
<status status="PASS" start="2026-04-18T03:22:48.807460" elapsed="0.004925"/>
</kw>
<status status="PASS" start="2026-04-18T03:22:48.801813" elapsed="0.010629"/>
</kw>
<doc>Test case teardown. Show linked bugs and start fast failing in case of failure.</doc>
<status status="PASS" start="2026-04-18T03:22:48.800383" elapsed="0.012103"/>
</kw>
<doc>Count the routes in example-ipv4-topology and fail if the count is not correct.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-18T03:22:45.386907" elapsed="3.425648">... click for list of related bugs or create a new one if needed (with the
"bgpcep_bgp_ingest_mixed_txt_singlepeer_prefixcount_check_talking_ipv4_topology_count"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=bgpcep_bgp_ingest_mixed_txt_singlepeer_prefixcount_check_talking_ipv4_topology_count&amp;order=bug_status"

0 != 250000</status>
</test>
<test id="s1-s2-t6" name="Kill_Talking_BGP_Speaker" line="120">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-18T03:22:48.817453" elapsed="0.000248"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-18T03:22:48.817172" 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-04-18T03:22:48.818865" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:22:48.818723" elapsed="0.000193"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:48.818698" elapsed="0.000240"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:22:48.823890" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:22:48.823772" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:48.823752" elapsed="0.000209"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-18T03:22:48.825025" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-18T03:22:48.824609" elapsed="0.000445"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-18T03:22:48.825538" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-18T03:22:48.825220" elapsed="0.000346"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-18T03:22:48.825612" elapsed="0.000035"/>
</return>
<msg time="2026-04-18T03:22:48.825776" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-18T03:22:48.824204" elapsed="0.001597"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:22:48.831456" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:22:48.831345" elapsed="0.000238"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:48.831324" elapsed="0.000287"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:22:48.832827" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:22:48.832715" elapsed="0.000160"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:48.832696" elapsed="0.000201"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-18T03:22:48.833395" level="INFO">${karaf_connection_index} = 4</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-18T03:22:48.833066" elapsed="0.000357"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-18T03:22:48.833835" level="INFO">${current_connection_index} = 7</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:22:48.833606" elapsed="0.000256"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-18T03:22:48.886830" 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 "b "g "p "c "e "p "- "b "g "p "- "i "n "g "e "s "t "[78C- "[A[78Cm</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-18T03:22:48.834372" elapsed="0.052666"/>
</kw>
<msg time="2026-04-18T03:22:48.887288" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-18T03:22:48.887338" 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 "b "g "p "c "e "p "- "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:22:48.834026" elapsed="0.053352"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-18T03:22:48.922071" level="INFO">"i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "K "i "l "l "_ "T "a "l "k "i "n "g "_ "B "G "P "_ "S "p "e "a "k "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-18T03:22:48.888098" elapsed="0.034093"/>
</kw>
<msg time="2026-04-18T03:22:48.922366" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-18T03:22:48.922413" level="INFO">${message_wait} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "K "i "l "l "_ "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-04-18T03:22:48.887651" elapsed="0.034799"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:48.922858" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:22:48.922582" elapsed="0.000334"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:48.922517" elapsed="0.000426"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:22:48.923413" level="INFO"> "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "K "i "l "l "_ "T "a "l "k "i "n "g "_ "B "G "P "_ "S "p "e "a "k "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:22:48.923091" elapsed="0.000396"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:48.923799" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:22:48.923574" elapsed="0.000280"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:48.923554" elapsed="0.000324"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-18T03:22:48.923914" elapsed="0.000037"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:22:48.926790" elapsed="0.000152"/>
</kw>
<msg time="2026-04-18T03:22:48.927005" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:22:48.925616" elapsed="0.001526"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:48.927429" elapsed="0.000078"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:48.927793" elapsed="0.000078"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-18T03:22:48.924865" elapsed="0.003120"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-18T03:22:48.924278" elapsed="0.003772"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-18T03:22:48.832381" elapsed="0.095770"/>
</kw>
<msg time="2026-04-18T03:22:48.928248" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:22:48.928293" level="INFO">${message} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "K "i "l "l "_ "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-04-18T03:22:48.831768" elapsed="0.096564"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:22:48.928520" elapsed="0.000050"/>
</return>
<status status="PASS" start="2026-04-18T03:22:48.928410" elapsed="0.000245"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:48.928390" elapsed="0.000293"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:48.929110" elapsed="0.000027"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:48.929489" elapsed="0.000048"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:22:48.929587" elapsed="0.000016"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-18T03:22:48.830995" elapsed="0.098704"/>
</kw>
<msg time="2026-04-18T03:22:48.929796" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:22:48.929841" level="INFO">${output} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "K "i "l "l "_ "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-04-18T03:22:48.826185" elapsed="0.103693"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:48.930211" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:22:48.929955" elapsed="0.000322"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:48.929937" elapsed="0.000367"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-18T03:22:48.826036" elapsed="0.104292"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-18T03:22:48.825859" elapsed="0.104503"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-18T03:22:48.823372" elapsed="0.107047"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-18T03:22:48.818387" elapsed="0.112089"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:22:48.817920" elapsed="0.112617"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-18T03:22:48.814274" elapsed="0.116320"/>
</kw>
<kw name="Kill_BGP_Speaker" owner="BGPSpeaker">
<kw name="Write_Bare_Ctrl_C" owner="RemoteBash">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:22:48.932023" level="INFO">${ctrl_c} = </msg>
<var>${ctrl_c}</var>
<arg>chr(int(3))</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:22:48.931469" elapsed="0.000582"/>
</kw>
<kw name="Write Bare" owner="SSHLibrary">
<arg>${ctrl_c}</arg>
<doc>Writes the given ``text`` on the remote machine without appending a newline.</doc>
<status status="PASS" start="2026-04-18T03:22:48.932211" elapsed="0.000257"/>
</kw>
<doc>Construct ctrl+c character and SSH-write it (without endline) to the current SSH connection.
Do not read anything yet.</doc>
<status status="PASS" start="2026-04-18T03:22:48.931199" elapsed="0.001359"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-18T03:22:48.952706" level="INFO">[?2004l^C
[?2004h[jenkins@releng-35801-190-1-mininet-ovs-217-0 ~]&gt;</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="PASS" start="2026-04-18T03:22:48.933098" elapsed="0.019751"/>
</kw>
<msg time="2026-04-18T03:22:48.953149" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:22:48.953234" level="INFO">${message} = [?2004l^C
[?2004h[jenkins@releng-35801-190-1-mininet-ovs-217-0 ~]&gt;</msg>
<var>${status}</var>
<var>${message}</var>
<arg>SSHLibrary.Read_Until_Prompt</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:22:48.932721" elapsed="0.020551"/>
</kw>
<kw name="Dump_BGP_Speaker_Logs" owner="BGPSpeaker">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-18T03:22:48.954284" level="INFO">Executing command 'cat play.py.out'.</msg>
<msg time="2026-04-18T03:22:48.966640" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-18T03:22:48.966872" level="INFO">${output_log} = 2026-04-18 03:05:53,856 INFO BGP-Thread-1 (job): Connecting in the talking mode.
2026-04-18 03:05:53,859 INFO BGP-Thread-1 (job): Connected to ODL.
2026-04-18 03:05:53,889 INFO BGP-Thread-1 (job): Ope...</msg>
<var>${output_log}</var>
<arg>cat ${BGPSpeaker__OUTPUT_LOG}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-18T03:22:48.954074" elapsed="0.012858"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:22:48.967923" level="INFO">2026-04-18 03:05:53,856 INFO BGP-Thread-1 (job): Connecting in the talking mode.
2026-04-18 03:05:53,859 INFO BGP-Thread-1 (job): Connected to ODL.
2026-04-18 03:05:53,889 INFO BGP-Thread-1 (job): Open message received.
2026-04-18 03:05:53,889 INFO BGP-Thread-1 (job): ffffffffffffffffffffffffffffffff00410104fbf000b4c000020224022241040000fbf006000200010400010001010400020001010440040047400200b44700
2026-04-18 03:05:53,890 INFO BGP-Thread-1 (job): Generator initialisation
2026-04-18 03:05:53,890 INFO BGP-Thread-1 (job):   Target total number of prefixes to be introduced: 250000
2026-04-18 03:05:53,890 INFO BGP-Thread-1 (job):   Prefix base: 8.0.1.0/28
2026-04-18 03:05:53,890 INFO BGP-Thread-1 (job):   My Autonomous System number: 64496
2026-04-18 03:05:53,890 INFO BGP-Thread-1 (job):   My Hold Time: 180
2026-04-18 03:05:53,890 INFO BGP-Thread-1 (job):   My BGP Identifier: 169782011
2026-04-18 03:05:53,890 INFO BGP-Thread-1 (job):   Next Hop: 192.0.2.1
2026-04-18 03:05:53,890 INFO BGP-Thread-1 (job):   Originator ID: None
2026-04-18 03:05:53,890 INFO BGP-Thread-1 (job):   Cluster list: None
2026-04-18 03:05:53,890 INFO BGP-Thread-1 (job):   Prefix count to be inserted at once: 10
2026-04-18 03:05:53,890 INFO BGP-Thread-1 (job):   Prefix count to be withdrawn at once: 9
2026-04-18 03:05:53,890 INFO BGP-Thread-1 (job):   Fast pre-fill up to 10 prefixes
2026-04-18 03:05:53,891 INFO BGP-Thread-1 (job):   Remaining number of prefixes to be processed in parallel with withdrawals: 249990
2026-04-18 03:05:53,891 INFO BGP-Thread-1 (job):   Common single UPDATE will be generated for both NLRI &amp; WITHDRAWN lists
2026-04-18 03:05:53,891 INFO BGP-Thread-1 (job):   Let's go ...

2026-04-18 03:05:53,903 INFO BGP-Thread-1 (job): Iteration: 0 - total remaining prefixes: 250000
2026-04-18 03:05:53,995 INFO BGP-Thread-1 (job): Iteration: 1000 - total remaining prefixes: 248991
2026-04-18 03:05:54,063 INFO BGP-Thread-1 (job): Iteration: 2000 - total remaining prefixes: 247991
2026-04-18 03:05:54,125 INFO BGP-Thread-1 (job): Iteration: 3000 - total remaining prefixes: 246991
2026-04-18 03:05:54,181 INFO BGP-Thread-1 (job): Iteration: 4000 - total remaining prefixes: 245991
2026-04-18 03:05:54,232 INFO BGP-Thread-1 (job): Iteration: 5000 - total remaining prefixes: 244991
2026-04-18 03:05:54,285 INFO BGP-Thread-1 (job): Iteration: 6000 - total remaining prefixes: 243991
2026-04-18 03:05:54,411 INFO BGP-Thread-1 (job): Iteration: 7000 - total remaining prefixes: 242991
2026-04-18 03:05:54,464 INFO BGP-Thread-1 (job): Iteration: 8000 - total remaining prefixes: 241991
2026-04-18 03:05:54,528 INFO BGP-Thread-1 (job): Iteration: 9000 - total remaining prefixes: 240991
2026-04-18 03:05:54,585 INFO BGP-Thread-1 (job): Iteration: 10000 - total remaining prefixes: 239991
2026-04-18 03:05:54,636 INFO BGP-Thread-1 (job): Iteration: 11000 - total remaining prefixes: 238991
2026-04-18 03:05:54,688 INFO BGP-Thread-1 (job): Iteration: 12000 - total remaining prefixes: 237991
2026-04-18 03:05:54,738 INFO BGP-Thread-1 (job): Iteration: 13000 - total remaining prefixes: 236991
2026-04-18 03:05:54,790 INFO BGP-Thread-1 (job): Iteration: 14000 - total remaining prefixes: 235991
2026-04-18 03:05:54,842 INFO BGP-Thread-1 (job): Iteration: 15000 - total remaining prefixes: 234991
2026-04-18 03:05:54,895 INFO BGP-Thread-1 (job): Iteration: 16000 - total remaining prefixes: 233991
2026-04-18 03:05:54,948 INFO BGP-Thread-1 (job): Iteration: 17000 - total remaining prefixes: 232991
2026-04-18 03:05:55,000 INFO BGP-Thread-1 (job): Iteration: 18000 - total remaining prefixes: 231991
2026-04-18 03:05:55,052 INFO BGP-Thread-1 (job): Iteration: 19000 - total remaining prefixes: 230991
2026-04-18 03:05:55,103 INFO BGP-Thread-1 (job): Iteration: 20000 - total remaining prefixes: 229991
2026-04-18 03:05:55,156 INFO BGP-Thread-1 (job): Iteration: 21000 - total remaining prefixes: 228991
2026-04-18 03:05:55,208 INFO BGP-Thread-1 (job): Iteration: 22000 - total remaining prefixes: 227991
2026-04-18 03:05:55,260 INFO BGP-Thread-1 (job): Iteration: 23000 - total remaining prefixes: 226991
2026-04-18 03:05:55,312 INFO BGP-Thread-1 (job): Iteration: 24000 - total remaining prefixes: 225991
2026-04-18 03:05:55,374 INFO BGP-Thread-1 (job): Iteration: 25000 - total remaining prefixes: 224991
2026-04-18 03:05:55,435 INFO BGP-Thread-1 (job): Iteration: 26000 - total remaining prefixes: 223991
2026-04-18 03:05:55,504 INFO BGP-Thread-1 (job): Iteration: 27000 - total remaining prefixes: 222991
2026-04-18 03:05:55,567 INFO BGP-Thread-1 (job): Iteration: 28000 - total remaining prefixes: 221991
2026-04-18 03:05:55,619 INFO BGP-Thread-1 (job): Iteration: 29000 - total remaining prefixes: 220991
2026-04-18 03:05:55,675 INFO BGP-Thread-1 (job): Iteration: 30000 - total remaining prefixes: 219991
2026-04-18 03:05:55,748 INFO BGP-Thread-1 (job): Iteration: 31000 - total remaining prefixes: 218991
2026-04-18 03:05:55,846 INFO BGP-Thread-1 (job): Iteration: 32000 - total remaining prefixes: 217991
2026-04-18 03:05:55,992 INFO BGP-Thread-1 (job): Iteration: 33000 - total remaining prefixes: 216991
2026-04-18 03:05:56,387 INFO BGP-Thread-1 (job): Iteration: 34000 - total remaining prefixes: 215991
2026-04-18 03:05:56,563 INFO BGP-Thread-1 (job): Iteration: 35000 - total remaining prefixes: 214991
2026-04-18 03:05:56,991 INFO BGP-Thread-1 (job): Iteration: 36000 - total remaining prefixes: 213991
2026-04-18 03:05:57,550 INFO BGP-Thread-1 (job): Iteration: 37000 - total remaining prefixes: 212991
2026-04-18 03:05:57,604 INFO BGP-Thread-1 (job): Iteration: 38000 - total remaining prefixes: 211991
2026-04-18 03:05:57,792 INFO BGP-Thread-1 (job): Iteration: 39000 - total remaining prefixes: 210991
2026-04-18 03:05:57,951 INFO BGP-Thread-1 (job): Iteration: 40000 - total remaining prefixes: 209991
2026-04-18 03:05:58,192 INFO BGP-Thread-1 (job): Iteration: 41000 - total remaining prefixes: 208991
2026-04-18 03:05:58,428 INFO BGP-Thread-1 (job): Iteration: 42000 - total remaining prefixes: 207991
2026-04-18 03:05:58,654 INFO BGP-Thread-1 (job): Iteration: 43000 - total remaining prefixes: 206991
2026-04-18 03:05:58,875 INFO BGP-Thread-1 (job): Iteration: 44000 - total remaining prefixes: 205991
2026-04-18 03:05:59,007 INFO BGP-Thread-1 (job): Iteration: 45000 - total remaining prefixes: 204991
2026-04-18 03:05:59,260 INFO BGP-Thread-1 (job): Iteration: 46000 - total remaining prefixes: 203991
2026-04-18 03:05:59,506 INFO BGP-Thread-1 (job): Iteration: 47000 - total remaining prefixes: 202991
2026-04-18 03:05:59,679 INFO BGP-Thread-1 (job): Iteration: 48000 - total remaining prefixes: 201991
2026-04-18 03:05:59,886 INFO BGP-Thread-1 (job): Iteration: 49000 - total remaining prefixes: 200991
2026-04-18 03:06:00,034 INFO BGP-Thread-1 (job): Iteration: 50000 - total remaining prefixes: 199991
2026-04-18 03:06:00,273 INFO BGP-Thread-1 (job): Iteration: 51000 - total remaining prefixes: 198991
2026-04-18 03:06:00,403 INFO BGP-Thread-1 (job): Iteration: 52000 - total remaining prefixes: 197991
2026-04-18 03:06:00,525 INFO BGP-Thread-1 (job): Iteration: 53000 - total remaining prefixes: 196991
2026-04-18 03:06:00,623 INFO BGP-Thread-1 (job): Iteration: 54000 - total remaining prefixes: 195991
2026-04-18 03:06:00,719 INFO BGP-Thread-1 (job): Iteration: 55000 - total remaining prefixes: 194991
2026-04-18 03:06:00,797 INFO BGP-Thread-1 (job): Iteration: 56000 - total remaining prefixes: 193991
2026-04-18 03:06:00,963 INFO BGP-Thread-1 (job): Iteration: 57000 - total remaining prefixes: 192991
2026-04-18 03:06:01,168 INFO BGP-Thread-1 (job): Iteration: 58000 - total remaining prefixes: 191991
2026-04-18 03:06:01,288 INFO BGP-Thread-1 (job): Iteration: 59000 - total remaining prefixes: 190991
2026-04-18 03:06:01,389 INFO BGP-Thread-1 (job): Iteration: 60000 - total remaining prefixes: 189991
2026-04-18 03:06:01,472 INFO BGP-Thread-1 (job): Iteration: 61000 - total remaining prefixes: 188991
2026-04-18 03:06:01,611 INFO BGP-Thread-1 (job): Iteration: 62000 - total remaining prefixes: 187991
2026-04-18 03:06:01,718 INFO BGP-Thread-1 (job): Iteration: 63000 - total remaining prefixes: 186991
2026-04-18 03:06:01,825 INFO BGP-Thread-1 (job): Iteration: 64000 - total remaining prefixes: 185991
2026-04-18 03:06:01,913 INFO BGP-Thread-1 (job): Iteration: 65000 - total remaining prefixes: 184991
2026-04-18 03:06:02,004 INFO BGP-Thread-1 (job): Iteration: 66000 - total remaining prefixes: 183991
2026-04-18 03:06:02,123 INFO BGP-Thread-1 (job): Iteration: 67000 - total remaining prefixes: 182991
2026-04-18 03:06:02,206 INFO BGP-Thread-1 (job): Iteration: 68000 - total remaining prefixes: 181991
2026-04-18 03:06:02,297 INFO BGP-Thread-1 (job): Iteration: 69000 - total remaining prefixes: 180991
2026-04-18 03:06:02,448 INFO BGP-Thread-1 (job): Iteration: 70000 - total remaining prefixes: 179991
2026-04-18 03:06:02,550 INFO BGP-Thread-1 (job): Iteration: 71000 - total remaining prefixes: 178991
2026-04-18 03:06:02,605 INFO BGP-Thread-1 (job): Iteration: 72000 - total remaining prefixes: 177991
2026-04-18 03:06:02,683 INFO BGP-Thread-1 (job): Iteration: 73000 - total remaining prefixes: 176991
2026-04-18 03:06:02,815 INFO BGP-Thread-1 (job): Iteration: 74000 - total remaining prefixes: 175991
2026-04-18 03:06:02,915 INFO BGP-Thread-1 (job): Iteration: 75000 - total remaining prefixes: 174991
2026-04-18 03:06:03,049 INFO BGP-Thread-1 (job): Iteration: 76000 - total remaining prefixes: 173991
2026-04-18 03:06:03,136 INFO BGP-Thread-1 (job): Iteration: 77000 - total remaining prefixes: 172991
2026-04-18 03:06:03,276 INFO BGP-Thread-1 (job): Iteration: 78000 - total remaining prefixes: 171991
2026-04-18 03:06:03,348 INFO BGP-Thread-1 (job): Iteration: 79000 - total remaining prefixes: 170991
2026-04-18 03:06:03,490 INFO BGP-Thread-1 (job): Iteration: 80000 - total remaining prefixes: 169991
2026-04-18 03:06:03,680 INFO BGP-Thread-1 (job): Iteration: 81000 - total remaining prefixes: 168991
2026-04-18 03:06:03,866 INFO BGP-Thread-1 (job): Iteration: 82000 - total remaining prefixes: 167991
2026-04-18 03:06:03,927 INFO BGP-Thread-1 (job): Iteration: 83000 - total remaining prefixes: 166991
2026-04-18 03:06:04,112 INFO BGP-Thread-1 (job): Iteration: 84000 - total remaining prefixes: 165991
2026-04-18 03:06:04,200 INFO BGP-Thread-1 (job): Iteration: 85000 - total remaining prefixes: 164991
2026-04-18 03:06:04,319 INFO BGP-Thread-1 (job): Iteration: 86000 - total remaining prefixes: 163991
2026-04-18 03:06:04,421 INFO BGP-Thread-1 (job): Iteration: 87000 - total remaining prefixes: 162991
2026-04-18 03:06:04,530 INFO BGP-Thread-1 (job): Iteration: 88000 - total remaining prefixes: 161991
2026-04-18 03:06:04,651 INFO BGP-Thread-1 (job): Iteration: 89000 - total remaining prefixes: 160991
2026-04-18 03:06:04,733 INFO BGP-Thread-1 (job): Iteration: 90000 - total remaining prefixes: 159991
2026-04-18 03:06:04,793 INFO BGP-Thread-1 (job): Iteration: 91000 - total remaining prefixes: 158991
2026-04-18 03:06:04,984 INFO BGP-Thread-1 (job): Iteration: 92000 - total remaining prefixes: 157991
2026-04-18 03:06:05,092 INFO BGP-Thread-1 (job): Iteration: 93000 - total remaining prefixes: 156991
2026-04-18 03:06:05,189 INFO BGP-Thread-1 (job): Iteration: 94000 - total remaining prefixes: 155991
2026-04-18 03:06:05,312 INFO BGP-Thread-1 (job): Iteration: 95000 - total remaining prefixes: 154991
2026-04-18 03:06:05,388 INFO BGP-Thread-1 (job): Iteration: 96000 - total remaining prefixes: 153991
2026-04-18 03:06:05,499 INFO BGP-Thread-1 (job): Iteration: 97000 - total remaining prefixes: 152991
2026-04-18 03:06:05,707 INFO BGP-Thread-1 (job): Iteration: 98000 - total remaining prefixes: 151991
2026-04-18 03:06:05,931 INFO BGP-Thread-1 (job): Iteration: 99000 - total remaining prefixes: 150991
2026-04-18 03:06:06,041 INFO BGP-Thread-1 (job): Iteration: 100000 - total remaining prefixes: 149991
2026-04-18 03:06:06,159 INFO BGP-Thread-1 (job): Iteration: 101000 - total remaining prefixes: 148991
2026-04-18 03:06:06,236 INFO BGP-Thread-1 (job): Iteration: 102000 - total remaining prefixes: 147991
2026-04-18 03:06:06,356 INFO BGP-Thread-1 (job): Iteration: 103000 - total remaining prefixes: 146991
2026-04-18 03:06:06,448 INFO BGP-Thread-1 (job): Iteration: 104000 - total remaining prefixes: 145991
2026-04-18 03:06:06,631 INFO BGP-Thread-1 (job): Iteration: 105000 - total remaining prefixes: 144991
2026-04-18 03:06:06,688 INFO BGP-Thread-1 (job): Iteration: 106000 - total remaining prefixes: 143991
2026-04-18 03:06:06,788 INFO BGP-Thread-1 (job): Iteration: 107000 - total remaining prefixes: 142991
2026-04-18 03:06:06,898 INFO BGP-Thread-1 (job): Iteration: 108000 - total remaining prefixes: 141991
2026-04-18 03:06:07,163 INFO BGP-Thread-1 (job): Iteration: 109000 - total remaining prefixes: 140991
2026-04-18 03:06:07,332 INFO BGP-Thread-1 (job): Iteration: 110000 - total remaining prefixes: 139991
2026-04-18 03:06:07,424 INFO BGP-Thread-1 (job): Iteration: 111000 - total remaining prefixes: 138991
2026-04-18 03:06:07,511 INFO BGP-Thread-1 (job): Iteration: 112000 - total remaining prefixes: 137991
2026-04-18 03:06:07,587 INFO BGP-Thread-1 (job): Iteration: 113000 - total remaining prefixes: 136991
2026-04-18 03:06:07,638 INFO BGP-Thread-1 (job): Iteration: 114000 - total remaining prefixes: 135991
2026-04-18 03:06:07,756 INFO BGP-Thread-1 (job): Iteration: 115000 - total remaining prefixes: 134991
2026-04-18 03:06:07,901 INFO BGP-Thread-1 (job): Iteration: 116000 - total remaining prefixes: 133991
2026-04-18 03:06:07,971 INFO BGP-Thread-1 (job): Iteration: 117000 - total remaining prefixes: 132991
2026-04-18 03:06:08,148 INFO BGP-Thread-1 (job): Iteration: 118000 - total remaining prefixes: 131991
2026-04-18 03:06:08,206 INFO BGP-Thread-1 (job): Iteration: 119000 - total remaining prefixes: 130991
2026-04-18 03:06:08,294 INFO BGP-Thread-1 (job): Iteration: 120000 - total remaining prefixes: 129991
2026-04-18 03:06:08,376 INFO BGP-Thread-1 (job): Iteration: 121000 - total remaining prefixes: 128991
2026-04-18 03:06:08,433 INFO BGP-Thread-1 (job): Iteration: 122000 - total remaining prefixes: 127991
2026-04-18 03:06:08,484 INFO BGP-Thread-1 (job): Iteration: 123000 - total remaining prefixes: 126991
2026-04-18 03:06:08,535 INFO BGP-Thread-1 (job): Iteration: 124000 - total remaining prefixes: 125991
2026-04-18 03:06:08,627 INFO BGP-Thread-1 (job): Iteration: 125000 - total remaining prefixes: 124991
2026-04-18 03:06:08,677 INFO BGP-Thread-1 (job): Iteration: 126000 - total remaining prefixes: 123991
2026-04-18 03:06:08,889 INFO BGP-Thread-1 (job): Iteration: 127000 - total remaining prefixes: 122991
2026-04-18 03:06:08,970 INFO BGP-Thread-1 (job): Iteration: 128000 - total remaining prefixes: 121991
2026-04-18 03:06:09,066 INFO BGP-Thread-1 (job): Iteration: 129000 - total remaining prefixes: 120991
2026-04-18 03:06:09,143 INFO BGP-Thread-1 (job): Iteration: 130000 - total remaining prefixes: 119991
2026-04-18 03:06:09,253 INFO BGP-Thread-1 (job): Iteration: 131000 - total remaining prefixes: 118991
2026-04-18 03:06:09,335 INFO BGP-Thread-1 (job): Iteration: 132000 - total remaining prefixes: 117991
2026-04-18 03:06:09,385 INFO BGP-Thread-1 (job): Iteration: 133000 - total remaining prefixes: 116991
2026-04-18 03:06:09,506 INFO BGP-Thread-1 (job): Iteration: 134000 - total remaining prefixes: 115991
2026-04-18 03:06:09,670 INFO BGP-Thread-1 (job): Iteration: 135000 - total remaining prefixes: 114991
2026-04-18 03:06:09,749 INFO BGP-Thread-1 (job): Iteration: 136000 - total remaining prefixes: 113991
2026-04-18 03:06:09,848 INFO BGP-Thread-1 (job): Iteration: 137000 - total remaining prefixes: 112991
2026-04-18 03:06:09,919 INFO BGP-Thread-1 (job): Iteration: 138000 - total remaining prefixes: 111991
2026-04-18 03:06:10,019 INFO BGP-Thread-1 (job): Iteration: 139000 - total remaining prefixes: 110991
2026-04-18 03:06:10,100 INFO BGP-Thread-1 (job): Iteration: 140000 - total remaining prefixes: 109991
2026-04-18 03:06:10,201 INFO BGP-Thread-1 (job): Iteration: 141000 - total remaining prefixes: 108991
2026-04-18 03:06:10,379 INFO BGP-Thread-1 (job): Iteration: 142000 - total remaining prefixes: 107991
2026-04-18 03:06:10,455 INFO BGP-Thread-1 (job): Iteration: 143000 - total remaining prefixes: 106991
2026-04-18 03:06:10,568 INFO BGP-Thread-1 (job): Iteration: 144000 - total remaining prefixes: 105991
2026-04-18 03:06:10,648 INFO BGP-Thread-1 (job): Iteration: 145000 - total remaining prefixes: 104991
2026-04-18 03:06:10,732 INFO BGP-Thread-1 (job): Iteration: 146000 - total remaining prefixes: 103991
2026-04-18 03:06:10,828 INFO BGP-Thread-1 (job): Iteration: 147000 - total remaining prefixes: 102991
2026-04-18 03:06:10,909 INFO BGP-Thread-1 (job): Iteration: 148000 - total remaining prefixes: 101991
2026-04-18 03:06:11,041 INFO BGP-Thread-1 (job): Iteration: 149000 - total remaining prefixes: 100991
2026-04-18 03:06:11,133 INFO BGP-Thread-1 (job): Iteration: 150000 - total remaining prefixes: 99991
2026-04-18 03:06:11,248 INFO BGP-Thread-1 (job): Iteration: 151000 - total remaining prefixes: 98991
2026-04-18 03:06:11,341 INFO BGP-Thread-1 (job): Iteration: 152000 - total remaining prefixes: 97991
2026-04-18 03:06:11,408 INFO BGP-Thread-1 (job): Iteration: 153000 - total remaining prefixes: 96991
2026-04-18 03:06:11,511 INFO BGP-Thread-1 (job): Iteration: 154000 - total remaining prefixes: 95991
2026-04-18 03:06:11,583 INFO BGP-Thread-1 (job): Iteration: 155000 - total remaining prefixes: 94991
2026-04-18 03:06:11,636 INFO BGP-Thread-1 (job): Iteration: 156000 - total remaining prefixes: 93991
2026-04-18 03:06:11,822 INFO BGP-Thread-1 (job): Iteration: 157000 - total remaining prefixes: 92991
2026-04-18 03:06:11,931 INFO BGP-Thread-1 (job): Iteration: 158000 - total remaining prefixes: 91991
2026-04-18 03:06:12,072 INFO BGP-Thread-1 (job): Iteration: 159000 - total remaining prefixes: 90991
2026-04-18 03:06:12,168 INFO BGP-Thread-1 (job): Iteration: 160000 - total remaining prefixes: 89991
2026-04-18 03:06:12,318 INFO BGP-Thread-1 (job): Iteration: 161000 - total remaining prefixes: 88991
2026-04-18 03:06:12,416 INFO BGP-Thread-1 (job): Iteration: 162000 - total remaining prefixes: 87991
2026-04-18 03:06:12,498 INFO BGP-Thread-1 (job): Iteration: 163000 - total remaining prefixes: 86991
2026-04-18 03:06:12,618 INFO BGP-Thread-1 (job): Iteration: 164000 - total remaining prefixes: 85991
2026-04-18 03:06:12,670 INFO BGP-Thread-1 (job): Iteration: 165000 - total remaining prefixes: 84991
2026-04-18 03:06:12,887 INFO BGP-Thread-1 (job): Iteration: 166000 - total remaining prefixes: 83991
2026-04-18 03:06:12,968 INFO BGP-Thread-1 (job): Iteration: 167000 - total remaining prefixes: 82991
2026-04-18 03:06:13,026 INFO BGP-Thread-1 (job): Iteration: 168000 - total remaining prefixes: 81991
2026-04-18 03:06:13,159 INFO BGP-Thread-1 (job): Iteration: 169000 - total remaining prefixes: 80991
2026-04-18 03:06:13,214 INFO BGP-Thread-1 (job): Iteration: 170000 - total remaining prefixes: 79991
2026-04-18 03:06:13,322 INFO BGP-Thread-1 (job): Iteration: 171000 - total remaining prefixes: 78991
2026-04-18 03:06:13,416 INFO BGP-Thread-1 (job): Iteration: 172000 - total remaining prefixes: 77991
2026-04-18 03:06:13,529 INFO BGP-Thread-1 (job): Iteration: 173000 - total remaining prefixes: 76991
2026-04-18 03:06:13,687 INFO BGP-Thread-1 (job): Iteration: 174000 - total remaining prefixes: 75991
2026-04-18 03:06:13,761 INFO BGP-Thread-1 (job): Iteration: 175000 - total remaining prefixes: 74991
2026-04-18 03:06:13,856 INFO BGP-Thread-1 (job): Iteration: 176000 - total remaining prefixes: 73991
2026-04-18 03:06:13,946 INFO BGP-Thread-1 (job): Iteration: 177000 - total remaining prefixes: 72991
2026-04-18 03:06:14,057 INFO BGP-Thread-1 (job): Iteration: 178000 - total remaining prefixes: 71991
2026-04-18 03:06:14,144 INFO BGP-Thread-1 (job): Iteration: 179000 - total remaining prefixes: 70991
2026-04-18 03:06:14,241 INFO BGP-Thread-1 (job): Iteration: 180000 - total remaining prefixes: 69991
2026-04-18 03:06:14,311 INFO BGP-Thread-1 (job): Iteration: 181000 - total remaining prefixes: 68991
2026-04-18 03:06:14,453 INFO BGP-Thread-1 (job): Iteration: 182000 - total remaining prefixes: 67991
2026-04-18 03:06:14,511 INFO BGP-Thread-1 (job): Iteration: 183000 - total remaining prefixes: 66991
2026-04-18 03:06:14,624 INFO BGP-Thread-1 (job): Iteration: 184000 - total remaining prefixes: 65991
2026-04-18 03:06:14,747 INFO BGP-Thread-1 (job): Iteration: 185000 - total remaining prefixes: 64991
2026-04-18 03:06:14,800 INFO BGP-Thread-1 (job): Iteration: 186000 - total remaining prefixes: 63991
2026-04-18 03:06:14,922 INFO BGP-Thread-1 (job): Iteration: 187000 - total remaining prefixes: 62991
2026-04-18 03:06:14,991 INFO BGP-Thread-1 (job): Iteration: 188000 - total remaining prefixes: 61991
2026-04-18 03:06:15,048 INFO BGP-Thread-1 (job): Iteration: 189000 - total remaining prefixes: 60991
2026-04-18 03:06:15,118 INFO BGP-Thread-1 (job): Iteration: 190000 - total remaining prefixes: 59991
2026-04-18 03:06:15,343 INFO BGP-Thread-1 (job): Iteration: 191000 - total remaining prefixes: 58991
2026-04-18 03:06:15,457 INFO BGP-Thread-1 (job): Iteration: 192000 - total remaining prefixes: 57991
2026-04-18 03:06:15,570 INFO BGP-Thread-1 (job): Iteration: 193000 - total remaining prefixes: 56991
2026-04-18 03:06:15,722 INFO BGP-Thread-1 (job): Iteration: 194000 - total remaining prefixes: 55991
2026-04-18 03:06:15,814 INFO BGP-Thread-1 (job): Iteration: 195000 - total remaining prefixes: 54991
2026-04-18 03:06:15,948 INFO BGP-Thread-1 (job): Iteration: 196000 - total remaining prefixes: 53991
2026-04-18 03:06:16,046 INFO BGP-Thread-1 (job): Iteration: 197000 - total remaining prefixes: 52991
2026-04-18 03:06:16,219 INFO BGP-Thread-1 (job): Iteration: 198000 - total remaining prefixes: 51991
2026-04-18 03:06:16,345 INFO BGP-Thread-1 (job): Iteration: 199000 - total remaining prefixes: 50991
2026-04-18 03:06:16,421 INFO BGP-Thread-1 (job): Iteration: 200000 - total remaining prefixes: 49991
2026-04-18 03:06:16,527 INFO BGP-Thread-1 (job): Iteration: 201000 - total remaining prefixes: 48991
2026-04-18 03:06:16,622 INFO BGP-Thread-1 (job): Iteration: 202000 - total remaining prefixes: 47991
2026-04-18 03:06:16,676 INFO BGP-Thread-1 (job): Iteration: 203000 - total remaining prefixes: 46991
2026-04-18 03:06:16,797 INFO BGP-Thread-1 (job): Iteration: 204000 - total remaining prefixes: 45991
2026-04-18 03:06:16,864 INFO BGP-Thread-1 (job): Iteration: 205000 - total remaining prefixes: 44991
2026-04-18 03:06:16,951 INFO BGP-Thread-1 (job): Iteration: 206000 - total remaining prefixes: 43991
2026-04-18 03:06:17,008 INFO BGP-Thread-1 (job): Iteration: 207000 - total remaining prefixes: 42991
2026-04-18 03:06:17,120 INFO BGP-Thread-1 (job): Iteration: 208000 - total remaining prefixes: 41991
2026-04-18 03:06:17,251 INFO BGP-Thread-1 (job): Iteration: 209000 - total remaining prefixes: 40991
2026-04-18 03:06:17,310 INFO BGP-Thread-1 (job): Iteration: 210000 - total remaining prefixes: 39991
2026-04-18 03:06:17,377 INFO BGP-Thread-1 (job): Iteration: 211000 - total remaining prefixes: 38991
2026-04-18 03:06:17,448 INFO BGP-Thread-1 (job): Iteration: 212000 - total remaining prefixes: 37991
2026-04-18 03:06:17,516 INFO BGP-Thread-1 (job): Iteration: 213000 - total remaining prefixes: 36991
2026-04-18 03:06:17,613 INFO BGP-Thread-1 (job): Iteration: 214000 - total remaining prefixes: 35991
2026-04-18 03:06:17,699 INFO BGP-Thread-1 (job): Iteration: 215000 - total remaining prefixes: 34991
2026-04-18 03:06:17,875 INFO BGP-Thread-1 (job): Iteration: 216000 - total remaining prefixes: 33991
2026-04-18 03:06:18,003 INFO BGP-Thread-1 (job): Iteration: 217000 - total remaining prefixes: 32991
2026-04-18 03:06:18,103 INFO BGP-Thread-1 (job): Iteration: 218000 - total remaining prefixes: 31991
2026-04-18 03:06:18,239 INFO BGP-Thread-1 (job): Iteration: 219000 - total remaining prefixes: 30991
2026-04-18 03:06:18,343 INFO BGP-Thread-1 (job): Iteration: 220000 - total remaining prefixes: 29991
2026-04-18 03:06:18,452 INFO BGP-Thread-1 (job): Iteration: 221000 - total remaining prefixes: 28991
2026-04-18 03:06:18,575 INFO BGP-Thread-1 (job): Iteration: 222000 - total remaining prefixes: 27991
2026-04-18 03:06:18,656 INFO BGP-Thread-1 (job): Iteration: 223000 - total remaining prefixes: 26991
2026-04-18 03:06:18,736 INFO BGP-Thread-1 (job): Iteration: 224000 - total remaining prefixes: 25991
2026-04-18 03:06:18,819 INFO BGP-Thread-1 (job): Iteration: 225000 - total remaining prefixes: 24991
2026-04-18 03:06:18,925 INFO BGP-Thread-1 (job): Iteration: 226000 - total remaining prefixes: 23991
2026-04-18 03:06:19,105 INFO BGP-Thread-1 (job): Iteration: 227000 - total remaining prefixes: 22991
2026-04-18 03:06:19,188 INFO BGP-Thread-1 (job): Iteration: 228000 - total remaining prefixes: 21991
2026-04-18 03:06:19,260 INFO BGP-Thread-1 (job): Iteration: 229000 - total remaining prefixes: 20991
2026-04-18 03:06:19,334 INFO BGP-Thread-1 (job): Iteration: 230000 - total remaining prefixes: 19991
2026-04-18 03:06:19,414 INFO BGP-Thread-1 (job): Iteration: 231000 - total remaining prefixes: 18991
2026-04-18 03:06:19,524 INFO BGP-Thread-1 (job): Iteration: 232000 - total remaining prefixes: 17991
2026-04-18 03:06:19,587 INFO BGP-Thread-1 (job): Iteration: 233000 - total remaining prefixes: 16991
2026-04-18 03:06:19,641 INFO BGP-Thread-1 (job): Iteration: 234000 - total remaining prefixes: 15991
2026-04-18 03:06:19,720 INFO BGP-Thread-1 (job): Iteration: 235000 - total remaining prefixes: 14991
2026-04-18 03:06:19,820 INFO BGP-Thread-1 (job): Iteration: 236000 - total remaining prefixes: 13991
2026-04-18 03:06:19,889 INFO BGP-Thread-1 (job): Iteration: 237000 - total remaining prefixes: 12991
2026-04-18 03:06:19,952 INFO BGP-Thread-1 (job): Iteration: 238000 - total remaining prefixes: 11991
2026-04-18 03:06:20,049 INFO BGP-Thread-1 (job): Iteration: 239000 - total remaining prefixes: 10991
2026-04-18 03:06:20,137 INFO BGP-Thread-1 (job): Iteration: 240000 - total remaining prefixes: 9991
2026-04-18 03:06:20,385 INFO BGP-Thread-1 (job): Iteration: 241000 - total remaining prefixes: 8991
2026-04-18 03:06:20,482 INFO BGP-Thread-1 (job): Iteration: 242000 - total remaining prefixes: 7991
2026-04-18 03:06:20,533 INFO BGP-Thread-1 (job): Iteration: 243000 - total remaining prefixes: 6991
2026-04-18 03:06:20,613 INFO BGP-Thread-1 (job): Iteration: 244000 - total remaining prefixes: 5991
2026-04-18 03:06:20,696 INFO BGP-Thread-1 (job): Iteration: 245000 - total remaining prefixes: 4991
2026-04-18 03:06:20,810 INFO BGP-Thread-1 (job): Iteration: 246000 - total remaining prefixes: 3991
2026-04-18 03:06:20,958 INFO BGP-Thread-1 (job): Iteration: 247000 - total remaining prefixes: 2991
2026-04-18 03:06:21,079 INFO BGP-Thread-1 (job): Iteration: 248000 - total remaining prefixes: 1991
2026-04-18 03:06:21,177 INFO BGP-Thread-1 (job): Iteration: 249000 - total remaining prefixes: 991
2026-04-18 03:06:21,277 INFO BGP-Thread-1 (job): All update messages generated.
2026-04-18 03:06:21,277 INFO BGP-Thread-1 (job): Storing performance results.
2026-04-18 03:06:21,277 INFO BGP-Thread-1 (job): ########## Final results ##########
2026-04-18 03:06:21,277 INFO BGP-Thread-1 (job): Number of iterations: 249991
2026-04-18 03:06:21,277 INFO BGP-Thread-1 (job): Number of UPDATE messages sent in the pre-fill phase: 1
2026-04-18 03:06:21,277 INFO BGP-Thread-1 (job): The pre-fill phase duration: 0.00012564659118652344s
2026-04-18 03:06:21,277 INFO BGP-Thread-1 (job): Number of UPDATE messages sent in the 2nd test phase: 249990
2026-04-18 03:06:21,277 INFO BGP-Thread-1 (job): The 2nd test phase duration: 27.373289585113525s
2026-04-18 03:06:21,277 INFO BGP-Thread-1 (job): Threshold for performance reporting: 1000
2026-04-18 03:06:21,278 INFO BGP-Thread-1 (job): Message generator performance results stored in totals-bgp.csv:
2026-04-18 03:06:21,278 INFO BGP-Thread-1 (job):   +10/-9 routes per UPDATE
2026-04-18 03:06:21,278 INFO BGP-Thread-1 (job):   249990
2026-04-18 03:06:21,278 INFO BGP-Thread-1 (job): Message generator performance results stored in performance-bgp.csv:
2026-04-18 03:06:21,278 INFO BGP-Thread-1 (job):   +10/-9 routes per UPDATE
2026-04-18 03:06:21,278 INFO BGP-Thread-1 (job):   9132
2026-04-18 03:06:21,279 INFO BGP-Thread-1 (job): Finally an END-OF-RIB is sent.
2026-04-18 03:06:31,289 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:06:31,290 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 10.010s
2026-04-18 03:06:31,290 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:06:31,290 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:06:31,290 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:06:41,300 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:06:41,301 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 20.020s
2026-04-18 03:06:41,301 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:06:41,301 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:06:41,301 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:06:51,311 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:06:51,312 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 30.031s
2026-04-18 03:06:51,312 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:06:51,312 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:06:51,312 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:06:53,927 INFO BGP-Thread-1 (job): ... idle for 2.615s
2026-04-18 03:06:53,928 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 32.646s
2026-04-18 03:06:53,928 INFO BGP-Thread-1 (job): KEEP ALIVE message received: 0xffffffffffffffffffffffffffffffff001304
2026-04-18 03:06:53,928 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:06:53,928 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:06:53,929 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:07:03,939 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:07:03,939 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 42.656s
2026-04-18 03:07:03,939 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:07:03,939 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:07:03,939 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:07:13,950 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:07:13,950 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 52.666s
2026-04-18 03:07:13,950 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:07:13,950 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:07:13,950 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:07:21,287 INFO BGP-Thread-1 (job): ... idle for 7.336s
2026-04-18 03:07:21,287 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 60.003s
2026-04-18 03:07:21,287 INFO BGP-Thread-1 (job): KEEP ALIVE is sent.
2026-04-18 03:07:21,287 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:07:21,287 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:07:21,287 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:07:31,298 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:07:31,298 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 70.013s
2026-04-18 03:07:31,298 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:07:31,298 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:07:31,298 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:07:41,309 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:07:41,309 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 80.023s
2026-04-18 03:07:41,309 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:07:41,309 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:07:41,309 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:07:51,320 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:07:51,320 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 90.033s
2026-04-18 03:07:51,320 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:07:51,320 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:07:51,320 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:07:53,962 INFO BGP-Thread-1 (job): ... idle for 2.642s
2026-04-18 03:07:53,962 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 92.675s
2026-04-18 03:07:53,962 INFO BGP-Thread-1 (job): KEEP ALIVE message received: 0xffffffffffffffffffffffffffffffff001304
2026-04-18 03:07:53,963 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:07:53,963 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:07:53,963 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:08:03,972 INFO BGP-Thread-1 (job): ... idle for 10.009s
2026-04-18 03:08:03,972 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 102.684s
2026-04-18 03:08:03,972 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:08:03,972 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:08:03,973 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:08:13,984 INFO BGP-Thread-1 (job): ... idle for 10.011s
2026-04-18 03:08:13,984 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 112.695s
2026-04-18 03:08:13,984 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:08:13,984 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:08:13,985 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:08:21,296 INFO BGP-Thread-1 (job): ... idle for 7.311s
2026-04-18 03:08:21,296 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 120.006s
2026-04-18 03:08:21,296 INFO BGP-Thread-1 (job): KEEP ALIVE is sent.
2026-04-18 03:08:21,297 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:08:21,297 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:08:21,297 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:08:31,308 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:08:31,308 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 130.016s
2026-04-18 03:08:31,308 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:08:31,308 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:08:31,308 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:08:41,319 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:08:41,319 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 140.027s
2026-04-18 03:08:41,319 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:08:41,319 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:08:41,319 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:08:51,330 INFO BGP-Thread-1 (job): ... idle for 10.011s
2026-04-18 03:08:51,330 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 150.037s
2026-04-18 03:08:51,330 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:08:51,330 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:08:51,330 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:08:53,963 INFO BGP-Thread-1 (job): ... idle for 2.632s
2026-04-18 03:08:53,963 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 152.669s
2026-04-18 03:08:53,963 INFO BGP-Thread-1 (job): KEEP ALIVE message received: 0xffffffffffffffffffffffffffffffff001304
2026-04-18 03:08:53,963 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:08:53,963 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:08:53,963 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:09:03,974 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:09:03,974 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 162.679s
2026-04-18 03:09:03,974 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:09:03,974 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:09:03,974 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:09:13,985 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:09:13,985 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 172.690s
2026-04-18 03:09:13,985 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:09:13,986 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:09:13,986 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:09:21,304 INFO BGP-Thread-1 (job): ... idle for 7.319s
2026-04-18 03:09:21,305 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 180.008s
2026-04-18 03:09:21,305 INFO BGP-Thread-1 (job): KEEP ALIVE is sent.
2026-04-18 03:09:21,305 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:09:21,305 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:09:21,305 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:09:31,316 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:09:31,316 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 190.018s
2026-04-18 03:09:31,316 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:09:31,316 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:09:31,316 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:09:41,327 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:09:41,327 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 200.029s
2026-04-18 03:09:41,327 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:09:41,327 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:09:41,327 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:09:51,338 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:09:51,339 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 210.039s
2026-04-18 03:09:51,339 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:09:51,340 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:09:51,340 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:09:53,963 INFO BGP-Thread-1 (job): ... idle for 2.623s
2026-04-18 03:09:53,963 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 212.662s
2026-04-18 03:09:53,963 INFO BGP-Thread-1 (job): KEEP ALIVE message received: 0xffffffffffffffffffffffffffffffff001304
2026-04-18 03:09:53,963 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:09:53,963 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:09:53,963 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:10:03,974 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:10:03,974 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 222.672s
2026-04-18 03:10:03,974 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:10:03,974 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:10:03,974 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:10:13,985 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:10:13,985 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 232.682s
2026-04-18 03:10:13,985 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:10:13,985 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:10:13,985 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:10:21,313 INFO BGP-Thread-1 (job): ... idle for 7.328s
2026-04-18 03:10:21,313 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 240.010s
2026-04-18 03:10:21,313 INFO BGP-Thread-1 (job): KEEP ALIVE is sent.
2026-04-18 03:10:21,313 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:10:21,313 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:10:21,313 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:10:31,315 INFO BGP-Thread-1 (job): ... idle for 10.001s
2026-04-18 03:10:31,317 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 250.011s
2026-04-18 03:10:31,317 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:10:31,317 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:10:31,317 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:10:41,328 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:10:41,328 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 260.021s
2026-04-18 03:10:41,328 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:10:41,328 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:10:41,328 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:10:51,337 INFO BGP-Thread-1 (job): ... idle for 10.009s
2026-04-18 03:10:51,338 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 270.030s
2026-04-18 03:10:51,338 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:10:51,338 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:10:51,338 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:10:53,995 INFO BGP-Thread-1 (job): ... idle for 2.657s
2026-04-18 03:10:53,995 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 272.687s
2026-04-18 03:10:53,996 INFO BGP-Thread-1 (job): KEEP ALIVE message received: 0xffffffffffffffffffffffffffffffff001304
2026-04-18 03:10:53,996 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:10:53,996 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:10:53,996 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:11:04,006 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:11:04,006 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 282.697s
2026-04-18 03:11:04,007 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:11:04,007 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:11:04,007 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:11:14,017 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:11:14,017 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 292.707s
2026-04-18 03:11:14,017 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:11:14,017 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:11:14,018 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:11:21,321 INFO BGP-Thread-1 (job): ... idle for 7.303s
2026-04-18 03:11:21,322 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 300.010s
2026-04-18 03:11:21,322 INFO BGP-Thread-1 (job): KEEP ALIVE is sent.
2026-04-18 03:11:21,322 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:11:21,322 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:11:21,322 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:11:31,333 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:11:31,333 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 310.021s
2026-04-18 03:11:31,333 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:11:31,333 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:11:31,333 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:11:41,344 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:11:41,344 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 320.031s
2026-04-18 03:11:41,344 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:11:41,344 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:11:41,344 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:11:51,355 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:11:51,355 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 330.041s
2026-04-18 03:11:51,355 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:11:51,355 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:11:51,355 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:11:54,007 INFO BGP-Thread-1 (job): ... idle for 2.652s
2026-04-18 03:11:54,007 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 332.693s
2026-04-18 03:11:54,007 INFO BGP-Thread-1 (job): KEEP ALIVE message received: 0xffffffffffffffffffffffffffffffff001304
2026-04-18 03:11:54,007 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:11:54,007 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:11:54,008 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:12:04,018 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:12:04,018 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 342.703s
2026-04-18 03:12:04,018 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:12:04,019 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:12:04,019 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:12:14,028 INFO BGP-Thread-1 (job): ... idle for 10.009s
2026-04-18 03:12:14,028 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 352.712s
2026-04-18 03:12:14,028 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:12:14,028 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:12:14,028 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:12:21,330 INFO BGP-Thread-1 (job): ... idle for 7.301s
2026-04-18 03:12:21,330 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 360.013s
2026-04-18 03:12:21,330 INFO BGP-Thread-1 (job): KEEP ALIVE is sent.
2026-04-18 03:12:21,330 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:12:21,331 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:12:21,331 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:12:31,341 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:12:31,341 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 370.023s
2026-04-18 03:12:31,341 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:12:31,341 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:12:31,341 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:12:41,351 INFO BGP-Thread-1 (job): ... idle for 10.009s
2026-04-18 03:12:41,351 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 380.032s
2026-04-18 03:12:41,351 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:12:41,351 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:12:41,351 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:12:51,362 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:12:51,362 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 390.043s
2026-04-18 03:12:51,362 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:12:51,362 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:12:51,362 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:12:54,029 INFO BGP-Thread-1 (job): ... idle for 2.666s
2026-04-18 03:12:54,029 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 392.709s
2026-04-18 03:12:54,029 INFO BGP-Thread-1 (job): KEEP ALIVE message received: 0xffffffffffffffffffffffffffffffff001304
2026-04-18 03:12:54,029 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:12:54,029 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:12:54,030 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:13:04,034 INFO BGP-Thread-1 (job): ... idle for 10.004s
2026-04-18 03:13:04,034 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 402.713s
2026-04-18 03:13:04,034 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:13:04,034 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:13:04,035 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:13:14,035 INFO BGP-Thread-1 (job): ... idle for 10.000s
2026-04-18 03:13:14,036 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 412.713s
2026-04-18 03:13:14,036 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:13:14,036 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:13:14,036 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:13:21,338 INFO BGP-Thread-1 (job): ... idle for 7.302s
2026-04-18 03:13:21,338 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 420.015s
2026-04-18 03:13:21,339 INFO BGP-Thread-1 (job): KEEP ALIVE is sent.
2026-04-18 03:13:21,339 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:13:21,339 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:13:21,339 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:13:31,349 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:13:31,350 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 430.026s
2026-04-18 03:13:31,350 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:13:31,350 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:13:31,350 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:13:41,360 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:13:41,361 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 440.036s
2026-04-18 03:13:41,361 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:13:41,361 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:13:41,361 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:13:51,371 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:13:51,372 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 450.046s
2026-04-18 03:13:51,372 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:13:51,372 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:13:51,372 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:13:54,045 INFO BGP-Thread-1 (job): ... idle for 2.673s
2026-04-18 03:13:54,045 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 452.719s
2026-04-18 03:13:54,046 INFO BGP-Thread-1 (job): KEEP ALIVE message received: 0xffffffffffffffffffffffffffffffff001304
2026-04-18 03:13:54,046 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:13:54,046 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:13:54,046 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:14:04,056 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:14:04,056 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 462.729s
2026-04-18 03:14:04,057 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:14:04,057 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:14:04,057 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:14:14,067 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:14:14,067 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 472.739s
2026-04-18 03:14:14,067 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:14:14,068 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:14:14,068 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:14:21,346 INFO BGP-Thread-1 (job): ... idle for 7.279s
2026-04-18 03:14:21,347 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 480.018s
2026-04-18 03:14:21,347 INFO BGP-Thread-1 (job): KEEP ALIVE is sent.
2026-04-18 03:14:21,347 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:14:21,347 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:14:21,347 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:14:31,357 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:14:31,357 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 490.028s
2026-04-18 03:14:31,358 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:14:31,358 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:14:31,358 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:14:41,368 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:14:41,369 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 500.038s
2026-04-18 03:14:41,369 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:14:41,369 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:14:41,369 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:14:51,379 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:14:51,379 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 510.049s
2026-04-18 03:14:51,380 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:14:51,380 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:14:51,380 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:14:54,078 INFO BGP-Thread-1 (job): ... idle for 2.698s
2026-04-18 03:14:54,078 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 512.747s
2026-04-18 03:14:54,078 INFO BGP-Thread-1 (job): KEEP ALIVE message received: 0xffffffffffffffffffffffffffffffff001304
2026-04-18 03:14:54,078 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:14:54,079 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:14:54,079 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:15:04,089 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:15:04,089 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 522.757s
2026-04-18 03:15:04,090 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:15:04,090 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:15:04,090 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:15:14,100 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:15:14,100 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 532.767s
2026-04-18 03:15:14,101 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:15:14,101 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:15:14,101 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:15:21,355 INFO BGP-Thread-1 (job): ... idle for 7.254s
2026-04-18 03:15:21,355 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 540.021s
2026-04-18 03:15:21,355 INFO BGP-Thread-1 (job): KEEP ALIVE is sent.
2026-04-18 03:15:21,355 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:15:21,355 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:15:21,356 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:15:31,366 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:15:31,366 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 550.031s
2026-04-18 03:15:31,366 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:15:31,366 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:15:31,366 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:15:41,377 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:15:41,377 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 560.041s
2026-04-18 03:15:41,377 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:15:41,377 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:15:41,377 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:15:51,387 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:15:51,388 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 570.051s
2026-04-18 03:15:51,388 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:15:51,388 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:15:51,388 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:15:54,108 INFO BGP-Thread-1 (job): ... idle for 2.720s
2026-04-18 03:15:54,108 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 572.771s
2026-04-18 03:15:54,108 INFO BGP-Thread-1 (job): KEEP ALIVE message received: 0xffffffffffffffffffffffffffffffff001304
2026-04-18 03:15:54,108 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:15:54,108 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:15:54,108 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:16:04,119 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:16:04,119 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 582.781s
2026-04-18 03:16:04,119 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:16:04,119 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:16:04,120 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:16:14,130 INFO BGP-Thread-1 (job): ... idle for 10.011s
2026-04-18 03:16:14,131 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 592.791s
2026-04-18 03:16:14,131 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:16:14,131 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:16:14,131 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:16:21,363 INFO BGP-Thread-1 (job): ... idle for 7.232s
2026-04-18 03:16:21,364 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 600.023s
2026-04-18 03:16:21,364 INFO BGP-Thread-1 (job): KEEP ALIVE is sent.
2026-04-18 03:16:21,364 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:16:21,364 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:16:21,364 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:16:31,371 INFO BGP-Thread-1 (job): ... idle for 10.006s
2026-04-18 03:16:31,371 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 610.030s
2026-04-18 03:16:31,371 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:16:31,371 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:16:31,371 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:16:41,382 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:16:41,382 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 620.040s
2026-04-18 03:16:41,382 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:16:41,382 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:16:41,382 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:16:51,393 INFO BGP-Thread-1 (job): ... idle for 10.011s
2026-04-18 03:16:51,393 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 630.051s
2026-04-18 03:16:51,393 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:16:51,394 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:16:51,394 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:16:54,134 INFO BGP-Thread-1 (job): ... idle for 2.740s
2026-04-18 03:16:54,134 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 632.791s
2026-04-18 03:16:54,134 INFO BGP-Thread-1 (job): KEEP ALIVE message received: 0xffffffffffffffffffffffffffffffff001304
2026-04-18 03:16:54,134 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:16:54,134 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:16:54,134 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:17:04,139 INFO BGP-Thread-1 (job): ... idle for 10.004s
2026-04-18 03:17:04,139 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 642.795s
2026-04-18 03:17:04,139 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:17:04,139 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:17:04,139 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:17:14,150 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:17:14,150 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 652.805s
2026-04-18 03:17:14,150 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:17:14,150 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:17:14,150 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:17:21,371 INFO BGP-Thread-1 (job): ... idle for 7.220s
2026-04-18 03:17:21,371 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 660.025s
2026-04-18 03:17:21,371 INFO BGP-Thread-1 (job): KEEP ALIVE is sent.
2026-04-18 03:17:21,371 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:17:21,371 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:17:21,371 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:17:31,382 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:17:31,382 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 670.035s
2026-04-18 03:17:31,382 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:17:31,382 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:17:31,382 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:17:41,387 INFO BGP-Thread-1 (job): ... idle for 10.004s
2026-04-18 03:17:41,387 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 680.040s
2026-04-18 03:17:41,387 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:17:41,387 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:17:41,387 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:17:51,398 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:17:51,398 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 690.050s
2026-04-18 03:17:51,398 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:17:51,398 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:17:51,398 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:17:54,167 INFO BGP-Thread-1 (job): ... idle for 2.768s
2026-04-18 03:17:54,167 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 692.818s
2026-04-18 03:17:54,167 INFO BGP-Thread-1 (job): KEEP ALIVE message received: 0xffffffffffffffffffffffffffffffff001304
2026-04-18 03:17:54,168 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:17:54,168 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:17:54,168 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:18:04,178 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:18:04,178 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 702.828s
2026-04-18 03:18:04,178 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:18:04,178 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:18:04,178 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:18:14,189 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:18:14,189 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 712.838s
2026-04-18 03:18:14,189 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:18:14,189 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:18:14,189 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:18:21,378 INFO BGP-Thread-1 (job): ... idle for 7.189s
2026-04-18 03:18:21,379 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 720.027s
2026-04-18 03:18:21,379 INFO BGP-Thread-1 (job): KEEP ALIVE is sent.
2026-04-18 03:18:21,379 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:18:21,379 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:18:21,379 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:18:31,389 INFO BGP-Thread-1 (job): ... idle for 10.009s
2026-04-18 03:18:31,389 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 730.036s
2026-04-18 03:18:31,389 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:18:31,389 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:18:31,390 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:18:41,398 INFO BGP-Thread-1 (job): ... idle for 10.009s
2026-04-18 03:18:41,399 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 740.045s
2026-04-18 03:18:41,399 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:18:41,399 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:18:41,399 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:18:51,409 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:18:51,410 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 750.055s
2026-04-18 03:18:51,410 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:18:51,410 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:18:51,410 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:18:54,176 INFO BGP-Thread-1 (job): ... idle for 2.766s
2026-04-18 03:18:54,177 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 752.822s
2026-04-18 03:18:54,177 INFO BGP-Thread-1 (job): KEEP ALIVE message received: 0xffffffffffffffffffffffffffffffff001304
2026-04-18 03:18:54,177 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:18:54,177 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:18:54,177 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:19:04,187 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:19:04,188 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 762.832s
2026-04-18 03:19:04,188 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:19:04,188 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:19:04,188 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:19:14,198 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:19:14,198 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 772.842s
2026-04-18 03:19:14,198 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:19:14,199 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:19:14,199 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:19:21,387 INFO BGP-Thread-1 (job): ... idle for 7.188s
2026-04-18 03:19:21,387 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 780.030s
2026-04-18 03:19:21,387 INFO BGP-Thread-1 (job): KEEP ALIVE is sent.
2026-04-18 03:19:21,387 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:19:21,388 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:19:21,388 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:19:31,399 INFO BGP-Thread-1 (job): ... idle for 10.011s
2026-04-18 03:19:31,400 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 790.041s
2026-04-18 03:19:31,400 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:19:31,400 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:19:31,400 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:19:41,411 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:19:41,411 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 800.052s
2026-04-18 03:19:41,411 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:19:41,411 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:19:41,411 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:19:51,422 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:19:51,422 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 810.062s
2026-04-18 03:19:51,422 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:19:51,422 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:19:51,423 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:19:54,209 INFO BGP-Thread-1 (job): ... idle for 2.786s
2026-04-18 03:19:54,209 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 812.848s
2026-04-18 03:19:54,209 INFO BGP-Thread-1 (job): KEEP ALIVE message received: 0xffffffffffffffffffffffffffffffff001304
2026-04-18 03:19:54,210 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:19:54,210 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:19:54,210 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:20:04,220 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:20:04,220 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 822.858s
2026-04-18 03:20:04,220 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:20:04,220 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:20:04,220 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:20:14,230 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:20:14,231 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 832.868s
2026-04-18 03:20:14,231 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:20:14,231 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:20:14,231 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:20:21,395 INFO BGP-Thread-1 (job): ... idle for 7.164s
2026-04-18 03:20:21,395 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 840.032s
2026-04-18 03:20:21,396 INFO BGP-Thread-1 (job): KEEP ALIVE is sent.
2026-04-18 03:20:21,396 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:20:21,396 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:20:21,396 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:20:31,407 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:20:31,407 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 850.042s
2026-04-18 03:20:31,407 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:20:31,407 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:20:31,407 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:20:41,417 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:20:41,417 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 860.052s
2026-04-18 03:20:41,418 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:20:41,418 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:20:41,418 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:20:51,428 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:20:51,428 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 870.063s
2026-04-18 03:20:51,429 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:20:51,429 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:20:51,429 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:20:54,243 INFO BGP-Thread-1 (job): ... idle for 2.814s
2026-04-18 03:20:54,243 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 872.877s
2026-04-18 03:20:54,243 INFO BGP-Thread-1 (job): KEEP ALIVE message received: 0xffffffffffffffffffffffffffffffff001304
2026-04-18 03:20:54,244 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:20:54,244 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:20:54,244 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:21:04,253 INFO BGP-Thread-1 (job): ... idle for 10.009s
2026-04-18 03:21:04,253 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 882.886s
2026-04-18 03:21:04,253 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:21:04,253 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:21:04,253 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:21:14,263 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:21:14,264 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 892.895s
2026-04-18 03:21:14,264 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:21:14,264 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:21:14,264 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:21:21,403 INFO BGP-Thread-1 (job): ... idle for 7.139s
2026-04-18 03:21:21,403 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 900.035s
2026-04-18 03:21:21,404 INFO BGP-Thread-1 (job): KEEP ALIVE is sent.
2026-04-18 03:21:21,404 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:21:21,404 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:21:21,404 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:21:31,414 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:21:31,415 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 910.045s
2026-04-18 03:21:31,415 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:21:31,415 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:21:31,415 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:21:41,423 INFO BGP-Thread-1 (job): ... idle for 10.008s
2026-04-18 03:21:41,424 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 920.053s
2026-04-18 03:21:41,424 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:21:41,424 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:21:41,424 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:21:51,434 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:21:51,434 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 930.063s
2026-04-18 03:21:51,434 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:21:51,434 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:21:51,434 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:21:54,276 INFO BGP-Thread-1 (job): ... idle for 2.842s
2026-04-18 03:21:54,277 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 932.905s
2026-04-18 03:21:54,277 INFO BGP-Thread-1 (job): KEEP ALIVE message received: 0xffffffffffffffffffffffffffffffff001304
2026-04-18 03:21:54,277 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:21:54,277 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:21:54,277 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:22:04,279 INFO BGP-Thread-1 (job): ... idle for 10.002s
2026-04-18 03:22:04,279 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 942.906s
2026-04-18 03:22:04,280 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:22:04,280 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:22:04,280 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:22:14,292 INFO BGP-Thread-1 (job): ... idle for 10.012s
2026-04-18 03:22:14,292 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 952.918s
2026-04-18 03:22:14,292 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:22:14,292 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:22:14,292 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:22:21,412 INFO BGP-Thread-1 (job): ... idle for 7.119s
2026-04-18 03:22:21,412 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 960.037s
2026-04-18 03:22:21,412 INFO BGP-Thread-1 (job): KEEP ALIVE is sent.
2026-04-18 03:22:21,412 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:22:21,413 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:22:21,413 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:22:31,423 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:22:31,423 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 970.047s
2026-04-18 03:22:31,424 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:22:31,424 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:22:31,424 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:22:41,432 INFO BGP-Thread-1 (job): ... idle for 10.008s
2026-04-18 03:22:41,432 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 980.055s
2026-04-18 03:22:41,432 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:22:41,432 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:22:41,432 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
Traceback (most recent call last):
  File "/home/jenkins/play.py", line 2543, in &lt;module&gt;
    threaded_job(arguments)
  File "/home/jenkins/play.py", line 2537, in threaded_job
    rpcserver.serve_forever()
  File "/usr/lib/python3.10/socketserver.py", line 232, in serve_forever
    ready = selector.select(poll_interval)
  File "/usr/lib/python3.10/selectors.py", line 416, in select
    fd_event_list = self._selector.poll(timeout)
KeyboardInterrupt</msg>
<arg>${output_log}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:22:48.967298" elapsed="0.002550"/>
</kw>
<doc>Send all output produced by the play.py utility to Robot logs.
This needs to be called if your suite detects play.py crashing and bypasses
Kill_BGP_Speaker in that case otherwise the output of play.py (which most
likely contains clues about why it crashed) will be lost.</doc>
<status status="PASS" start="2026-04-18T03:22:48.953640" elapsed="0.016341"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<status status="PASS" start="2026-04-18T03:22:48.970399" elapsed="0.000067"/>
</return>
<status status="PASS" start="2026-04-18T03:22:48.970133" elapsed="0.000433"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:48.970087" elapsed="0.000537"/>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${message}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:48.970962" elapsed="0.000048"/>
</kw>
<kw name="Fail" owner="BuiltIn">
<arg>The prompt was not seen within timeout period.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:48.971331" elapsed="0.000044"/>
</kw>
<doc>Interrupt play.py, fail if no prompt is seen within SSHLibrary timeout.
Also dump the logs with the output the program produced.
This keyword is also suitable for stopping BGP manager.</doc>
<status status="PASS" start="2026-04-18T03:22:48.930872" elapsed="0.040627"/>
</kw>
<kw name="Do_Not_Fail_Fast_From_Now_On" owner="FailFast">
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-18T03:22:48.973354" level="INFO">${SuiteFastFail} = False</msg>
<arg>${SuiteFastFail}</arg>
<arg>False</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-18T03:22:48.972611" elapsed="0.000839"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-04-18T03:22:48.971959" elapsed="0.001782"/>
</kw>
<kw name="Teardown_Test_Show_Bugs_If_Test_Failed" owner="SetupUtils" type="TEARDOWN">
<kw name="SetupUtils__Report_Bugs_Causing_Failure" owner="SetupUtils">
<if>
<branch type="IF" condition="'${SetupUtils__Known_Bug_ID}' != ''">
<kw name="Report Failure Due To Bug" owner="Utils">
<arg>${SetupUtils__Known_Bug_ID}</arg>
<doc>Report that a test failed due to a known Bugzilla bug whose
number is provided as an argument.
Not FAILED (incl. SKIPPED) test are not reported.
This keyword must be used in the [Teardown] setting of the affected test
or as the first line of the test if FastFail module is not being
used. It reports the URL of the bug on console and also puts it
into the Robot log file.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:48.976508" elapsed="0.000085"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:22:48.975652" elapsed="0.001027"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:48.975610" elapsed="0.001171"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>'${SetupUtils__Known_Bug_ID}' != ''</arg>
<arg>Set_Known_Bug_Id</arg>
<arg>${EMPTY}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:22:48.977137" elapsed="0.000368"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:22:48.982483" level="INFO">${test_skipped} = False</msg>
<var>${test_skipped}</var>
<arg>len(re.findall('SKIPPED', """${TEST_MESSAGE}""")) &gt; 0</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:22:48.982066" elapsed="0.000444"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-04-18T03:22:48.982747" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-18T03:22:48.982601" elapsed="0.000202"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:48.982582" 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-04-18T03:22:48.982976" elapsed="0.000022"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<var>${reference}</var>
<arg>${SUITE_NAME}_${TEST_NAME}</arg>
<arg>[ /\.-]</arg>
<arg>_</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:48.983150" elapsed="0.000020"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:48.983322" elapsed="0.000020"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${msg}</var>
<arg>... click for list of related bugs or create a new one if needed (with the${newline}"${reference}"${newline}reference somewhere inside)</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:48.983490" elapsed="0.000020"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${bugs}</var>
<arg>"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=${reference}&amp;order=bug_status"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:48.983673" elapsed="0.000020"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:48.983840" elapsed="0.000019"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:48.984005" elapsed="0.000019"/>
</kw>
<doc>Report that a test failed and point to linked Bugzilla bug(s).
Linked bugs must contain the ${reference} inside comments (workaround
becasue of currently missing suitable field for external references and
not correctly working the CONTENT MATCHES filter).
Not FAILED (incl. SKIPPED) test are not reported.
This keyword must be used in the [Teardown] setting of the affected test
or as the first line of the test if FastFail module is not being
used. It reports the URL of the bug on console and also puts it
into the Robot log file.</doc>
<status status="PASS" start="2026-04-18T03:22:48.981759" elapsed="0.002320"/>
</kw>
<status status="PASS" start="2026-04-18T03:22:48.975155" elapsed="0.008974"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-04-18T03:22:48.974311" elapsed="0.009858"/>
</kw>
<doc>Abort the Python speaker. Also, attempt to stop failing fast.</doc>
<tag>critical</tag>
<status status="PASS" start="2026-04-18T03:22:48.813317" elapsed="0.170889"/>
</test>
<test id="s1-s2-t7" name="Store_Results_For_Talking_BGP_Speaker" line="129">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-18T03:22:48.987490" elapsed="0.000225"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-18T03:22:48.987227" 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-04-18T03:22:48.988786" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:22:48.988675" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:48.988656" elapsed="0.000233"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:22:48.993748" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:22:48.993641" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:48.993623" elapsed="0.000194"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-18T03:22:48.994817" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-18T03:22:48.994419" elapsed="0.000426"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-18T03:22:48.995302" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-18T03:22:48.995007" elapsed="0.000321"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-18T03:22:48.995373" elapsed="0.000028"/>
</return>
<msg time="2026-04-18T03:22:48.995542" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-18T03:22:48.994044" elapsed="0.001525"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:22:49.000965" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:22:49.000856" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:49.000836" elapsed="0.000199"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:22:49.002218" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:22:49.002111" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:49.002093" elapsed="0.000195"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-18T03:22:49.002768" level="INFO">${karaf_connection_index} = 4</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-18T03:22:49.002436" elapsed="0.000360"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-18T03:22:49.003177" level="INFO">${current_connection_index} = 7</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:22:49.002958" elapsed="0.000246"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-18T03:22:49.037100" 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 "b "g "p "c "e "p "- "b "g "p "- "i "n "g "e "s "t "[78C- "[A[78Cm</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-18T03:22:49.003724" elapsed="0.033504"/>
</kw>
<msg time="2026-04-18T03:22:49.037427" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-18T03:22:49.037474" 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 "b "g "p "c "e "p "- "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:22:49.003367" elapsed="0.034143"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-18T03:22:49.070765" level="INFO">"i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "S "t "o "r "e "_ "R "e "s "u "l "t "s "_ "F "o "r "_ "T "a "l "k "i "n "g "_ "B "G "P "_ "S "p "e "a "k "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-18T03:22:49.038107" elapsed="0.032973"/>
</kw>
<msg time="2026-04-18T03:22:49.071365" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-18T03:22:49.071418" level="INFO">${message_wait} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "S "t "o "r "e "_ "R "...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:22:49.037732" elapsed="0.033724"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:49.072033" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:22:49.071650" elapsed="0.000447"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:49.071602" elapsed="0.000524"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:22:49.072735" level="INFO"> "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "S "t "o "r "e "_ "R "e "s "u "l "t "s "_ "F "o "r "_ "T "a "l "k "i "n "g "_ "B "G "P "_ "S "p "e "a "k "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:22:49.072288" elapsed="0.000532"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:49.073122" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:22:49.072890" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:49.072870" elapsed="0.000333"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-18T03:22:49.073244" elapsed="0.000047"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:22:49.076213" elapsed="0.000170"/>
</kw>
<msg time="2026-04-18T03:22:49.076547" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:22:49.075076" elapsed="0.001634"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:49.077034" elapsed="0.000081"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:49.077389" elapsed="0.000080"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-18T03:22:49.074371" elapsed="0.003448"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-18T03:22:49.073764" elapsed="0.004128"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-18T03:22:49.001811" elapsed="0.076200"/>
</kw>
<msg time="2026-04-18T03:22:49.078118" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:22:49.078165" level="INFO">${message} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "S "t "o "r "e "_ "R "...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:22:49.001190" elapsed="0.077015"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:22:49.078413" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-18T03:22:49.078293" elapsed="0.000184"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:49.078270" elapsed="0.000232"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:49.078983" elapsed="0.000027"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:49.079345" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:22:49.079417" elapsed="0.000016"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-18T03:22:49.000488" elapsed="0.079075"/>
</kw>
<msg time="2026-04-18T03:22:49.079877" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:22:49.079926" level="INFO">${output} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "S "t "o "r "e "_ "R "...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:22:48.995944" elapsed="0.084020"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:49.080317" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:22:49.080047" elapsed="0.000325"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:49.080028" elapsed="0.000368"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-18T03:22:48.995797" elapsed="0.084624"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-18T03:22:48.995624" elapsed="0.084835"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-18T03:22:48.993265" elapsed="0.087255"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-18T03:22:48.988345" elapsed="0.092263"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:22:48.987924" elapsed="0.092734"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-18T03:22:48.984905" elapsed="0.095811"/>
</kw>
<kw name="Store_File_To_Workspace">
<kw name="List Files In Directory" owner="SSHLibrary">
<msg time="2026-04-18T03:22:49.088209" level="INFO">10 files:
.bash_logout
.bashrc
.profile
bgp_peer.log
ipaddr.py
lf-env.sh
performance-bgp.csv
play.py
play.py.out
totals-bgp.csv</msg>
<msg time="2026-04-18T03:22:49.088387" level="INFO">${files} = ['.bash_logout', '.bashrc', '.profile', 'bgp_peer.log', 'ipaddr.py', 'lf-env.sh', 'performance-bgp.csv', 'play.py', 'play.py.out', 'totals-bgp.csv']</msg>
<var>${files}</var>
<arg>.</arg>
<doc>A wrapper for `List Directory` that returns only files.</doc>
<status status="PASS" start="2026-04-18T03:22:49.081327" elapsed="0.007100"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-18T03:22:49.088967" level="INFO">Executing command 'cat totals-bgp.csv'.</msg>
<msg time="2026-04-18T03:22:49.100904" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-18T03:22:49.101062" level="INFO">${output_log} = +10/-9 routes per UPDATE
249990</msg>
<var>${output_log}</var>
<arg>cat ${src_file_name}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-18T03:22:49.088733" elapsed="0.012366"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:22:49.102120" level="INFO">+10/-9 routes per UPDATE
249990</msg>
<arg>${output_log}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:22:49.101437" elapsed="0.000786"/>
</kw>
<kw name="Create File" owner="OperatingSystem">
<msg time="2026-04-18T03:22:49.103666" level="INFO" html="true">Created file '&lt;a href="file:///w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/totals-bgp.csv"&gt;/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/totals-bgp.csv&lt;/a&gt;'.</msg>
<arg>${dst_file_name}</arg>
<arg>${output_log}</arg>
<doc>Creates a file with the given content and encoding.</doc>
<status status="PASS" start="2026-04-18T03:22:49.102666" elapsed="0.001218"/>
</kw>
<arg>totals-${RESULTS_FILE_NAME}</arg>
<arg>totals-${RESULTS_FILE_NAME}</arg>
<doc>Store the provided file from the SSH client to workspace.</doc>
<status status="PASS" start="2026-04-18T03:22:49.080902" elapsed="0.023125"/>
</kw>
<kw name="Store_File_To_Workspace">
<kw name="List Files In Directory" owner="SSHLibrary">
<msg time="2026-04-18T03:22:49.143602" level="INFO">10 files:
.bash_logout
.bashrc
.profile
bgp_peer.log
ipaddr.py
lf-env.sh
performance-bgp.csv
play.py
play.py.out
totals-bgp.csv</msg>
<msg time="2026-04-18T03:22:49.143894" level="INFO">${files} = ['.bash_logout', '.bashrc', '.profile', 'bgp_peer.log', 'ipaddr.py', 'lf-env.sh', 'performance-bgp.csv', 'play.py', 'play.py.out', 'totals-bgp.csv']</msg>
<var>${files}</var>
<arg>.</arg>
<doc>A wrapper for `List Directory` that returns only files.</doc>
<status status="PASS" start="2026-04-18T03:22:49.105383" elapsed="0.038573"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-18T03:22:49.144802" level="INFO">Executing command 'cat performance-bgp.csv'.</msg>
<msg time="2026-04-18T03:22:49.157226" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-18T03:22:49.157453" level="INFO">${output_log} = +10/-9 routes per UPDATE
9132</msg>
<var>${output_log}</var>
<arg>cat ${src_file_name}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-18T03:22:49.144398" elapsed="0.013112"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:22:49.158625" level="INFO">+10/-9 routes per UPDATE
9132</msg>
<arg>${output_log}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:22:49.157931" elapsed="0.000804"/>
</kw>
<kw name="Create File" owner="OperatingSystem">
<msg time="2026-04-18T03:22:49.160003" level="INFO" html="true">Created file '&lt;a href="file:///w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/performance-bgp.csv"&gt;/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/performance-bgp.csv&lt;/a&gt;'.</msg>
<arg>${dst_file_name}</arg>
<arg>${output_log}</arg>
<doc>Creates a file with the given content and encoding.</doc>
<status status="PASS" start="2026-04-18T03:22:49.159221" elapsed="0.000909"/>
</kw>
<arg>performance-${RESULTS_FILE_NAME}</arg>
<arg>performance-${RESULTS_FILE_NAME}</arg>
<doc>Store the provided file from the SSH client to workspace.</doc>
<status status="PASS" start="2026-04-18T03:22:49.104378" elapsed="0.055902"/>
</kw>
<kw name="Store_File_To_Workspace">
<kw name="List Files In Directory" owner="SSHLibrary">
<msg time="2026-04-18T03:22:49.201852" level="INFO">10 files:
.bash_logout
.bashrc
.profile
bgp_peer.log
ipaddr.py
lf-env.sh
performance-bgp.csv
play.py
play.py.out
totals-bgp.csv</msg>
<msg time="2026-04-18T03:22:49.202136" level="INFO">${files} = ['.bash_logout', '.bashrc', '.profile', 'bgp_peer.log', 'ipaddr.py', 'lf-env.sh', 'performance-bgp.csv', 'play.py', 'play.py.out', 'totals-bgp.csv']</msg>
<var>${files}</var>
<arg>.</arg>
<doc>A wrapper for `List Directory` that returns only files.</doc>
<status status="PASS" start="2026-04-18T03:22:49.161927" elapsed="0.040252"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-18T03:22:49.202860" level="INFO">Executing command 'cat totals-bgp.csv'.</msg>
<msg time="2026-04-18T03:22:49.214975" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-18T03:22:49.215110" level="INFO">${output_log} = +10/-9 routes per UPDATE
249990</msg>
<var>${output_log}</var>
<arg>cat ${src_file_name}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-18T03:22:49.202579" elapsed="0.012567"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:22:49.215864" level="INFO">+10/-9 routes per UPDATE
249990</msg>
<arg>${output_log}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:22:49.215393" elapsed="0.000540"/>
</kw>
<kw name="Create File" owner="OperatingSystem">
<msg time="2026-04-18T03:22:49.216761" level="INFO" html="true">Created file '&lt;a href="file:///w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/prefixcount-talking-totals-bgp.csv"&gt;/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/prefixcount-talking-totals-bgp.csv&lt;/a&gt;'.</msg>
<arg>${dst_file_name}</arg>
<arg>${output_log}</arg>
<doc>Creates a file with the given content and encoding.</doc>
<status status="PASS" start="2026-04-18T03:22:49.216226" elapsed="0.000616"/>
</kw>
<arg>totals-${RESULTS_FILE_NAME}</arg>
<arg>prefixcount-talking-totals-${RESULTS_FILE_NAME}</arg>
<doc>Store the provided file from the SSH client to workspace.</doc>
<status status="PASS" start="2026-04-18T03:22:49.160775" elapsed="0.056168"/>
</kw>
<kw name="Store_File_To_Workspace">
<kw name="List Files In Directory" owner="SSHLibrary">
<msg time="2026-04-18T03:22:49.263636" level="INFO">10 files:
.bash_logout
.bashrc
.profile
bgp_peer.log
ipaddr.py
lf-env.sh
performance-bgp.csv
play.py
play.py.out
totals-bgp.csv</msg>
<msg time="2026-04-18T03:22:49.263946" level="INFO">${files} = ['.bash_logout', '.bashrc', '.profile', 'bgp_peer.log', 'ipaddr.py', 'lf-env.sh', 'performance-bgp.csv', 'play.py', 'play.py.out', 'totals-bgp.csv']</msg>
<var>${files}</var>
<arg>.</arg>
<doc>A wrapper for `List Directory` that returns only files.</doc>
<status status="PASS" start="2026-04-18T03:22:49.218239" elapsed="0.045767"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-18T03:22:49.264680" level="INFO">Executing command 'cat performance-bgp.csv'.</msg>
<msg time="2026-04-18T03:22:49.277032" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-18T03:22:49.277427" level="INFO">${output_log} = +10/-9 routes per UPDATE
9132</msg>
<var>${output_log}</var>
<arg>cat ${src_file_name}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-18T03:22:49.264392" elapsed="0.013114"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:22:49.279057" level="INFO">+10/-9 routes per UPDATE
9132</msg>
<arg>${output_log}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:22:49.278143" elapsed="0.001052"/>
</kw>
<kw name="Create File" owner="OperatingSystem">
<msg time="2026-04-18T03:22:49.280748" level="INFO" html="true">Created file '&lt;a href="file:///w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/prefixcount-talking-performance-bgp.csv"&gt;/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/prefixcount-talking-performance-bgp.csv&lt;/a&gt;'.</msg>
<arg>${dst_file_name}</arg>
<arg>${output_log}</arg>
<doc>Creates a file with the given content and encoding.</doc>
<status status="PASS" start="2026-04-18T03:22:49.279796" elapsed="0.001122"/>
</kw>
<arg>performance-${RESULTS_FILE_NAME}</arg>
<arg>prefixcount-talking-performance-${RESULTS_FILE_NAME}</arg>
<doc>Store the provided file from the SSH client to workspace.</doc>
<status status="PASS" start="2026-04-18T03:22:49.217188" elapsed="0.063957"/>
</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">
<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-04-18T03:22:49.282662" elapsed="0.000377"/>
</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-04-18T03:22:49.284404" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:22:49.283795" elapsed="0.000786"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:49.283760" elapsed="0.000864"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>'${SetupUtils__Known_Bug_ID}' != ''</arg>
<arg>Set_Known_Bug_Id</arg>
<arg>${EMPTY}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:22:49.284854" elapsed="0.000531"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:22:49.295339" level="INFO">${test_skipped} = False</msg>
<var>${test_skipped}</var>
<arg>len(re.findall('SKIPPED', """${TEST_MESSAGE}""")) &gt; 0</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:22:49.294632" elapsed="0.000757"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-04-18T03:22:49.295770" elapsed="0.000050"/>
</return>
<status status="PASS" start="2026-04-18T03:22:49.295517" elapsed="0.000351"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:49.295483" elapsed="0.000423"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:49.296139" elapsed="0.000033"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<var>${reference}</var>
<arg>${SUITE_NAME}_${TEST_NAME}</arg>
<arg>[ /\.-]</arg>
<arg>_</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:49.296403" elapsed="0.000030"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:49.296686" elapsed="0.000031"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${msg}</var>
<arg>... click for list of related bugs or create a new one if needed (with the${newline}"${reference}"${newline}reference somewhere inside)</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:49.297030" elapsed="0.000041"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${bugs}</var>
<arg>"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=${reference}&amp;order=bug_status"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:49.297277" elapsed="0.000021"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:49.297448" elapsed="0.000020"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:49.297637" elapsed="0.000021"/>
</kw>
<doc>Report that a test failed and point to linked Bugzilla bug(s).
Linked bugs must contain the ${reference} inside comments (workaround
becasue of currently missing suitable field for external references and
not correctly working the CONTENT MATCHES filter).
Not FAILED (incl. SKIPPED) test are not reported.
This keyword must be used in the [Teardown] setting of the affected test
or as the first line of the test if FastFail module is not being
used. It reports the URL of the bug on console and also puts it
into the Robot log file.</doc>
<status status="PASS" start="2026-04-18T03:22:49.294065" elapsed="0.003653"/>
</kw>
<status status="PASS" start="2026-04-18T03:22:49.283431" elapsed="0.014339"/>
</kw>
<doc>Test case teardown. Show linked bugs and start fast failing in case of failure.</doc>
<status status="PASS" start="2026-04-18T03:22:49.282098" elapsed="0.015714"/>
</kw>
<doc>Store results for plotting</doc>
<status status="PASS" start="2026-04-18T03:22:48.984420" elapsed="0.313437"/>
</test>
<test id="s1-s2-t8" name="Wait_For_Stable_Ipv4_Topology_After_Talking" line="137">
<kw name="Setup_Test_With_Logging_And_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Fail_This_Fast_On_Previous_Error" owner="FailFast">
<if>
<branch type="IF" condition="'''${SuiteFastFail}'''=='True'">
<kw name="Fail" owner="BuiltIn">
<arg>SKIPPED due to a failure in a previous fundamental test case.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:49.302227" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:22:49.302005" elapsed="0.000283"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:49.301987" elapsed="0.000325"/>
</if>
<doc>Mark (immediately) this test case as failed when fast-fail is enabled in suite.</doc>
<status status="PASS" start="2026-04-18T03:22:49.301819" elapsed="0.000539"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:22:49.303376" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:22:49.303267" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:49.303250" 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-04-18T03:22:49.308506" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:22:49.308397" elapsed="0.000172"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:49.308378" elapsed="0.000215"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-18T03:22:49.309631" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-18T03:22:49.309220" elapsed="0.000441"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-18T03:22:49.310131" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-18T03:22:49.309824" elapsed="0.000333"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-18T03:22:49.310202" elapsed="0.000032"/>
</return>
<msg time="2026-04-18T03:22:49.310359" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-18T03:22:49.308834" 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-04-18T03:22:49.315941" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:22:49.315834" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:49.315815" elapsed="0.000250"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:22:49.317412" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:22:49.317304" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:49.317286" elapsed="0.000195"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-18T03:22:49.317965" level="INFO">${karaf_connection_index} = 4</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-18T03:22:49.317654" elapsed="0.000338"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-18T03:22:49.318389" level="INFO">${current_connection_index} = 7</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:22:49.318157" elapsed="0.000259"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-18T03:22:49.347577" 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 "b "g "p "c "e "p "- "b "g "p "- "i "n "g "e "s "t "[78C- "[A[78Cm</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-18T03:22:49.318942" elapsed="0.028758"/>
</kw>
<msg time="2026-04-18T03:22:49.347899" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-18T03:22:49.347946" 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 "b "g "p "c "e "p "- "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:22:49.318601" elapsed="0.029385"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-18T03:22:49.379551" level="INFO">"i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "W "a "i "t "_ "F "o "r "_ "S "t "a "b "l "e "_ "I "p "v "4 "_ "T "o "p "o "l "o "g "y "_ "A "f "t "e "r "_ "T "a "l "k "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-04-18T03:22:49.348605" elapsed="0.031184"/>
</kw>
<msg time="2026-04-18T03:22:49.380041" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-18T03:22:49.380092" level="INFO">${message_wait} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "W "a "i "t "_ "F "o "...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:22:49.348180" elapsed="0.031951"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:49.380750" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:22:49.380251" elapsed="0.000564"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:49.380215" elapsed="0.000630"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:22:49.381440" level="INFO"> "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "W "a "i "t "_ "F "o "r "_ "S "t "a "b "l "e "_ "I "p "v "4 "_ "T "o "p "o "l "o "g "y "_ "A "f "t "e "r "_ "T "a "l "k "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-04-18T03:22:49.381000" 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-04-18T03:22:49.381846" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:22:49.381615" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:49.381595" elapsed="0.000332"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-18T03:22:49.381966" elapsed="0.000041"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:22:49.385228" elapsed="0.000399"/>
</kw>
<msg time="2026-04-18T03:22:49.385696" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:22:49.383869" elapsed="0.001969"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:49.386126" elapsed="0.000083"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:49.386481" elapsed="0.000224"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-18T03:22:49.383050" elapsed="0.003777"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-18T03:22:49.382437" elapsed="0.004456"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-18T03:22:49.317001" elapsed="0.069994"/>
</kw>
<msg time="2026-04-18T03:22:49.387092" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:22:49.387138" level="INFO">${message} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "W "a "i "t "_ "F "o "...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:22:49.316224" elapsed="0.070951"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:22:49.387369" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-18T03:22:49.387257" elapsed="0.000233"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:49.387236" elapsed="0.000282"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:49.388003" elapsed="0.000159"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:49.388506" elapsed="0.000042"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:22:49.388597" elapsed="0.000016"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-18T03:22:49.315486" elapsed="0.073223"/>
</kw>
<msg time="2026-04-18T03:22:49.388804" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:22:49.388849" level="INFO">${output} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "W "a "i "t "_ "F "o "...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:22:49.310934" elapsed="0.077951"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:49.389216" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:22:49.388961" elapsed="0.000309"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:49.388943" elapsed="0.000351"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-18T03:22:49.310786" elapsed="0.078533"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-18T03:22:49.310439" elapsed="0.078915"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-18T03:22:49.308027" elapsed="0.081384"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-18T03:22:49.302977" elapsed="0.086492"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:22:49.302513" elapsed="0.087004"/>
</kw>
<doc>Test case setup which skips on previous failure. If not, logs test case name to Karaf log.
Recommended to be used as the default test case setup.</doc>
<status status="PASS" start="2026-04-18T03:22:49.298994" elapsed="0.090727"/>
</kw>
<kw name="Wait_For_Ipv4_Topology_Prefixes_To_Become_Stable" owner="PrefixCounting">
<if>
<branch type="IF" condition="&quot;&quot;&quot;${shards_list}&quot;&quot;&quot;==&quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="Closure_From_Keyword_And_Arguments" owner="ScalarClosures">
<return>
<value>${keyword}</value>
<value>${args}</value>
<value>${kwargs}</value>
<status status="PASS" start="2026-04-18T03:22:49.409873" elapsed="0.000038"/>
</return>
<msg time="2026-04-18T03:22:49.410103" level="INFO">${getter} = ['Get_Ipv4_Topology_Count', [], {'session': 'operational', 'topology': 'example-ipv4-topology'}]</msg>
<var>${getter}</var>
<arg>Get_Ipv4_Topology_Count</arg>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>Turn keyword with given arguments into a scalar closure.</doc>
<status status="PASS" start="2026-04-18T03:22:49.409498" elapsed="0.000633"/>
</kw>
<status status="PASS" start="2026-04-18T03:22:49.407129" elapsed="0.003042"/>
</branch>
<branch type="ELSE">
<kw name="Closure_From_Keyword_And_Arguments" owner="ScalarClosures">
<var>${getter}</var>
<arg>Get_Ipv4_Topology_Count_With_Shards_Check</arg>
<arg>${shards_list}</arg>
<arg>${shards_details}</arg>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>Turn keyword with given arguments into a scalar closure.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:49.410397" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:22:49.410196" elapsed="0.000321"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:49.407107" elapsed="0.003520"/>
</if>
<kw name="Closure_From_Keyword_And_Arguments" owner="ScalarClosures">
<return>
<value>${keyword}</value>
<value>${args}</value>
<value>${kwargs}</value>
<status status="PASS" start="2026-04-18T03:22:49.411132" elapsed="0.000028"/>
</return>
<msg time="2026-04-18T03:22:49.411339" level="INFO">${validator} = ['WaitUtils.Excluding_Stability_Safe_Stateful_Validator_As_Keyword', ['state_holder', 'data_holder'], {'excluded_value': '250000'}]</msg>
<var>${validator}</var>
<arg>WaitUtils.Excluding_Stability_Safe_Stateful_Validator_As_Keyword</arg>
<arg>state_holder</arg>
<arg>data_holder</arg>
<arg>excluded_value=${excluded_count}</arg>
<doc>Turn keyword with given arguments into a scalar closure.</doc>
<status status="PASS" start="2026-04-18T03:22:49.410829" elapsed="0.000537"/>
</kw>
<kw name="Wait_For_Getter_Error_Or_Safe_Stateful_Validator_Consecutive_Success" owner="WaitUtils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:22:49.413051" level="INFO">${tmp} = 1</msg>
<var>${tmp}</var>
<arg>int(${count})</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:22:49.412645" elapsed="0.000433"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:22:49.413655" level="INFO">count=1</msg>
<arg>count=${tmp}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:22:49.413240" elapsed="0.000462"/>
</kw>
<kw name="WaitUtils__Check_Sanity_And_Compute_Derived_Times" owner="WaitUtils">
<if>
<branch type="IF" condition="int(${count}) &lt; 1">
<kw name="Fail" owner="BuiltIn">
<arg>\${count} is ${count} and not at least 1.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:49.414680" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:22:49.414437" elapsed="0.000298"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:49.414418" elapsed="0.000341"/>
</if>
<kw name="Convert Time" owner="DateTime">
<msg time="2026-04-18T03:22:49.415299" level="INFO">${period_in_seconds} = 60.0</msg>
<var>${period_in_seconds}</var>
<arg>${period}</arg>
<arg>result_format=number</arg>
<doc>Converts between supported `time formats`.</doc>
<status status="PASS" start="2026-04-18T03:22:49.414949" elapsed="0.000376"/>
</kw>
<if>
<branch type="IF" condition="${period_in_seconds} &lt;= 0.0">
<kw name="Fail" owner="BuiltIn">
<arg>\${period} ${period} has to be positive.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:49.415696" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:22:49.415396" elapsed="0.000446"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:49.415378" elapsed="0.000499"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:22:49.416219" level="INFO">${date_now} = 2026-04-18 03:22:49.416</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:22:49.416041" elapsed="0.000209"/>
</kw>
<kw name="Convert Time" owner="DateTime">
<msg time="2026-04-18T03:22:49.416971" level="INFO">${timeout_in_seconds} = 980.0</msg>
<var>${timeout_in_seconds}</var>
<arg>${timeout}</arg>
<arg>result_format=number</arg>
<doc>Converts between supported `time formats`.</doc>
<status status="PASS" start="2026-04-18T03:22:49.416453" elapsed="0.000544"/>
</kw>
<kw name="Add Time To Date" owner="DateTime">
<msg time="2026-04-18T03:22:49.417483" level="INFO">${date_deadline} = 2026-04-18 03:39:09.416</msg>
<var>${date_deadline}</var>
<arg>${date_now}</arg>
<arg>${timeout_in_seconds}</arg>
<doc>Adds time to date and returns the resulting date.</doc>
<status status="PASS" start="2026-04-18T03:22:49.417160" elapsed="0.000348"/>
</kw>
<return>
<value>${timeout_in_seconds}</value>
<value>${period_in_seconds}</value>
<value>${date_deadline}</value>
<status status="PASS" start="2026-04-18T03:22:49.417573" elapsed="0.000031"/>
</return>
<msg time="2026-04-18T03:22:49.417817" level="INFO">${timeout_in_seconds} = 980.0</msg>
<msg time="2026-04-18T03:22:49.417912" level="INFO">${period_in_seconds} = 60.0</msg>
<msg time="2026-04-18T03:22:49.418041" level="INFO">${date_deadline} = 2026-04-18 03:39:09.416</msg>
<var>${timeout_in_seconds}</var>
<var>${period_in_seconds}</var>
<var>${date_deadline}</var>
<arg>timeout=${timeout}</arg>
<arg>period=${period}</arg>
<arg>count=${count}</arg>
<doc>Common checks for argument values. Return times in seconds and deadline date implied by timeout time.</doc>
<status status="PASS" start="2026-04-18T03:22:49.414033" elapsed="0.004034"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:22:49.418696" level="INFO">${maximum_sleeps} = 17</msg>
<var>${maximum_sleeps}</var>
<arg>math.ceil(${timeout_in_seconds} / ${period_in_seconds})</arg>
<arg>modules=math</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:22:49.418241" elapsed="0.000482"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:22:49.419599" level="INFO">${result} = No result yet.</msg>
<var>${result}</var>
<arg>No result yet.</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:22:49.418886" elapsed="0.000742"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:22:49.420082" level="INFO">${state} = 250000</msg>
<var>${state}</var>
<arg>${initial_state}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:22:49.419790" elapsed="0.000317"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="Getter_And_Safe_Stateful_Validator_Have_To_Succeed_Consecutively_By_Deadline" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:22:49.422118" level="INFO">${result} = No result yet.</msg>
<var>${result}</var>
<arg>No result yet.</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:22:49.421855" elapsed="0.000290"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:22:49.422740" level="INFO">${state} = 250000</msg>
<var>${state}</var>
<arg>${initial_state}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:22:49.422352" elapsed="0.000414"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:22:49.423245" level="INFO">${sleeps} = 0</msg>
<var>${sleeps}</var>
<arg>${count} - 1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:22:49.422924" elapsed="0.000347"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:22:49.424826" level="INFO">${date_now} = 2026-04-18 03:22:49.425</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:22:49.424674" elapsed="0.000179"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:22:49.425482" level="INFO">${time_deadline} = 979.991</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:22:49.425006" elapsed="0.000503"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:22:49.426071" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:22:49.425691" elapsed="0.000405"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:49.426500" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:22:49.426167" elapsed="0.000604"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:49.426148" elapsed="0.000721"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:22:49.424076" elapsed="0.002846"/>
</kw>
<msg time="2026-04-18T03:22:49.427022" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:22:49.427066" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:22:49.423469" elapsed="0.003619"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:22:49.427275" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:22:49.427167" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:49.427149" elapsed="0.000196"/>
</if>
<for flavor="IN RANGE">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_As_Is" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:22:49.430330" level="INFO">${keyword} = Get_Ipv4_Topology_Count</msg>
<msg time="2026-04-18T03:22:49.430377" level="INFO">${args} = []</msg>
<msg time="2026-04-18T03:22:49.430422" level="INFO">${kwargs} = {'session': 'operational', 'topology': 'example-ipv4-topology'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:22:49.429966" elapsed="0.000479"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Get_Ipv4_Topology_Count" owner="PrefixCounting">
<kw name="Get_Ipv4_Topology" owner="PrefixCounting">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:22:53.062686" level="INFO">GET Request : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01agv6blx930rdupfsp7wkuo902.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-18T03:22:53.077629" level="INFO">GET Response : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Transfer-Encoding': 'chunked'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xmlns="urn:opendaylight:params:xml:ns:yang:odl-bgp-topology-types"/&gt;&lt;/topology-types&gt;&lt;node&gt;&lt;node-id&gt;192.0.2.1&lt;/node-id&gt;&lt;igp-node-attributes xmlns="urn:TBD:params:xml:ns:yang:nt:l3-unicast-igp-topology"&gt;&lt;prefix&gt;&lt;prefix&gt;8.20.15.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.65.76.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.222.18.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.234.69.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.59.125.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.205.46.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.69.249.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.243.186.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.86.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.138.152.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.201.33.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.107.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.133.25.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.19.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.45.49.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.194.22.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.226.161.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.211.127.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.100.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.254.101.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.205.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.60.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.234.208.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.228.239.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.27.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.177.154.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.201.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.148.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.160.202.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.48.218.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.52.93.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.93.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.182.185.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.34.217.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.116.158.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.236.169.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.223.35.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.103.82.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.7.2.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.131.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.40.95.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.244.132.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.28.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.253.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.83.39.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.4.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.193.28.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.36.83.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.143.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.73.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.128.217.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.135.39.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.6.81.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.78.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.54.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.250.105.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.110.78.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.182.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.4.223.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.49.100.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.5.205.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.165.63.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.36.184.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.214.36.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.171.128.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.208.52.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.113.57.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.3.37.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.237.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.160.220.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.198.13.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.174.151.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.48.34.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.21.1.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.1.30.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.108.237.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.89.117.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.218.102.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.24.70.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.41.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.48.122.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.51.175.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.79.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.25.67.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.153.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.219.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.88.115.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.129.239.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.117.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.204.169.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.10.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.139.169.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.79.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.53.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.31.83.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.117.152.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.46.66.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.86.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.3.214.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.74.90.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.197.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.54.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.41.3.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.97.95.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.179.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.188.172.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.219.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.124.44.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.187.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.197.228.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.87.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.133.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.78.124.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.149.209.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.33.23.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.243.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.189.185.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.80.206.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.150.251.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.208.98.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.125.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.213.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.71.27.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.234.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.109.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.112.121.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.8.69.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.201.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.203.154.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.73.19.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.169.175.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.15.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.4.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.75.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.68.155.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.16.40.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.231.11.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.85.57.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.191.139.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.191.228.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.75.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.3.166.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.32.247.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.242.134.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.184.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.164.222.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.35.248.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.209.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.60.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.129.2.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.88.147.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.222.193.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.58.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.61.198.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.32.165.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.120.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.251.232.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.111.147.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.203.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.161.229.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.68.153.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.105.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.252.41.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.2.231.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.240.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.146.121.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.92.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.151.79.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.10.14.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.95.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.155.232.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.32.13.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.92.229.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.102.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.118.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.83.215.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.38.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.110.203.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.240.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.116.31.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.238.174.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.235.83.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.4.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.122.151.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.21.216.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.146.154.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.199.188.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.194.94.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.153.168.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.255.64.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.22.16/28&lt;/pref... (set the log level to DEBUG or TRACE to see the full content) 
 </msg>
<msg time="2026-04-18T03:22:53.082053" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${PC_NW_TOPOLOGY}=${topology}?content=nonconfig</arg>
<arg>expected_status=anything</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-18T03:22:49.433927" elapsed="3.648190"/>
</kw>
<if>
<branch type="IF" condition="${response.status_code} != 200">
<kw name="Fail" owner="BuiltIn">
<arg>Get on ${topology} returned status code ${response.status_code} with message: ${response.text}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:53.085095" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:22:53.082358" elapsed="0.002834"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:53.082286" elapsed="0.002965"/>
</if>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-18T03:22:53.085359" elapsed="0.000096"/>
</return>
<msg time="2026-04-18T03:22:53.099193" level="INFO">${topology} = &lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xml...</msg>
<var>${topology}</var>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>GET the example-ipv4-topology data, check status is 200, return the topology data.</doc>
<status status="PASS" start="2026-04-18T03:22:49.432948" elapsed="3.666365"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:22:53.199458" level="INFO">${prefix_count} = 0</msg>
<var>${prefix_count}</var>
<arg>len(re.findall('"prefix":"', '''${topology}'''))</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:22:53.099881" elapsed="0.099723"/>
</kw>
<return>
<value>${prefix_count}</value>
<status status="PASS" start="2026-04-18T03:22:53.199737" elapsed="0.000060"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Get topology. If not fail, return number of prefixes in the topology.</doc>
<status status="PASS" start="2026-04-18T03:22:49.431164" elapsed="3.768925"/>
</kw>
<msg time="2026-04-18T03:22:53.200230" level="INFO">${result} = 0</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:22:49.430639" elapsed="3.769618"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:22:53.200310" elapsed="0.000028"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure without affecting arguments.</doc>
<status status="PASS" start="2026-04-18T03:22:49.429453" elapsed="3.770985"/>
</kw>
<msg time="2026-04-18T03:22:53.200566" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:22:53.200615" level="INFO">${message} = 0</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:22:49.428927" elapsed="3.771713"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:22:53.200885" elapsed="0.027277"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:22:53.229379" elapsed="0.000036"/>
</return>
<status status="PASS" start="2026-04-18T03:22:53.229242" elapsed="0.000209"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:53.229217" elapsed="0.000265"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:53.229681" elapsed="0.000025"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with 0.</doc>
<status status="PASS" start="2026-04-18T03:22:53.228769" elapsed="0.000999"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:22:53.229813" elapsed="0.000027"/>
</return>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:22:49.428501" elapsed="3.801438"/>
</kw>
<msg time="2026-04-18T03:22:53.230037" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:22:53.230085" level="INFO">${data} = 0</msg>
<var>${status}</var>
<var>${data}</var>
<arg>ScalarClosures.Run_Keyword_And_Collect_Garbage</arg>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:22:49.427945" elapsed="3.802164"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Getter failed: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:22:53.230296" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:22:53.230186" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:53.230167" elapsed="0.000200"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:22:53.232029" level="INFO">${date_now} = 2026-04-18 03:22:53.232</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:22:53.231831" elapsed="0.000227"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:22:53.232651" level="INFO">${time_deadline} = 976.184</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:22:53.232214" elapsed="0.000466"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:22:53.233257" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:22:53.232847" elapsed="0.000446"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:53.233766" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:22:53.233402" elapsed="0.000424"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:53.233369" elapsed="0.000482"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:22:53.231066" elapsed="0.002832"/>
</kw>
<msg time="2026-04-18T03:22:53.233998" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:22:53.234043" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:22:53.230562" elapsed="0.003504"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:22:53.234365" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:22:53.234253" elapsed="0.000164"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:53.234234" elapsed="0.000211"/>
</if>
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_After_Replacing_First_Two_Arguments" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:22:53.236606" level="INFO">${keyword} = WaitUtils.Excluding_Stability_Safe_Stateful_Validator_As_Keyword</msg>
<msg time="2026-04-18T03:22:53.236658" level="INFO">${args} = ['state_holder', 'data_holder']</msg>
<msg time="2026-04-18T03:22:53.236707" level="INFO">${kwargs} = {'excluded_value': '250000'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:22:53.236224" elapsed="0.000507"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>0</arg>
<arg>${arg1}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:22:53.236899" elapsed="0.000216"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>1</arg>
<arg>${arg2}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:22:53.237278" elapsed="0.000196"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Excluding_Stability_Safe_Stateful_Validator_As_Keyword" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:22:53.239329" level="INFO">${new_state} = 0</msg>
<var>${new_state}</var>
<arg>${data}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:22:53.238914" elapsed="0.000443"/>
</kw>
<if>
<branch type="IF" condition="${data} == ${excluded_value}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Got the excluded value.</value>
<status status="NOT RUN" start="2026-04-18T03:22:53.239654" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:22:53.239439" elapsed="0.000270"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:53.239416" elapsed="0.000316"/>
</if>
<if>
<branch type="IF" condition="${data} != ${old_state}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Data value has changed.</value>
<status status="PASS" start="2026-04-18T03:22:53.239974" elapsed="0.000032"/>
</return>
<status status="PASS" start="2026-04-18T03:22:53.239787" elapsed="0.000270"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:53.239770" elapsed="0.000318"/>
</if>
<return>
<value>${new_state}</value>
<value>PASS</value>
<value>Validated stable: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:22:53.240133" elapsed="0.000019"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Report failure if got the excluded value or if data value changed from last time. Useful to become validator.</doc>
<status status="PASS" start="2026-04-18T03:22:53.238406" elapsed="0.001863"/>
</kw>
<msg time="2026-04-18T03:22:53.240355" level="INFO">${result} = [0, 'FAIL', 'Data value has changed.']</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:22:53.237674" elapsed="0.002707"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:22:53.240430" elapsed="0.000027"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure with replaced first two positional arguments.</doc>
<status status="PASS" start="2026-04-18T03:22:53.235779" elapsed="0.004795"/>
</kw>
<msg time="2026-04-18T03:22:53.240668" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:22:53.240714" level="INFO">${message} = [0, 'FAIL', 'Data value has changed.']</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:22:53.235187" elapsed="0.005550"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:22:53.240905" elapsed="0.026590"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:22:53.268612" elapsed="0.000037"/>
</return>
<status status="PASS" start="2026-04-18T03:22:53.268448" elapsed="0.000236"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:53.268424" elapsed="0.000285"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:53.268882" elapsed="0.000024"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with [0, 'FAIL', 'Data value has changed.'].</doc>
<status status="PASS" start="2026-04-18T03:22:53.268018" elapsed="0.000950"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:22:53.269013" elapsed="0.000028"/>
</return>
<msg time="2026-04-18T03:22:53.269188" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:22:53.269235" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:22:53.269275" level="INFO">${result} = Data value has changed.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>ScalarClosures.Run_Closure_After_Replacing_First_Two_Arguments</arg>
<arg>${safe_validator}</arg>
<arg>${state}</arg>
<arg>${data}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:22:53.234709" elapsed="0.034589"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Validator failed: ${result}</value>
<status status="PASS" start="2026-04-18T03:22:53.269504" elapsed="0.000043"/>
</return>
<status status="PASS" start="2026-04-18T03:22:53.269383" elapsed="0.000206"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:53.269363" elapsed="0.000252"/>
</if>
<if>
<branch type="IF" condition="${sleeps_left} &lt;= 0">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:22:53.269706" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:22:53.269670" elapsed="0.000081"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:22:53.269654" elapsed="0.000120"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:53.269937" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:22:53.270072" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:22:53.270037" elapsed="0.000155"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:22:53.270020" elapsed="0.000197"/>
</if>
<kw name="Sleep" owner="BuiltIn">
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:53.270360" elapsed="0.000021"/>
</kw>
<var name="${sleeps_left}">0</var>
<status status="PASS" start="2026-04-18T03:22:49.427796" elapsed="3.842619"/>
</iter>
<var>${sleeps_left}</var>
<value>${count}-1</value>
<value>-1</value>
<value>-1</value>
<status status="PASS" start="2026-04-18T03:22:49.427397" elapsed="3.843055"/>
</for>
<kw name="Fail" owner="BuiltIn">
<arg>Logic error, we should have returned before.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:53.270635" elapsed="0.000022"/>
</kw>
<msg time="2026-04-18T03:22:53.270864" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:22:53.270910" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:22:53.270951" level="INFO">${result} = Validator failed: Data value has changed.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>count=${count}</arg>
<arg>getter=${getter}</arg>
<arg>safe_validator=${safe_validator}</arg>
<arg>initial_state=${state}</arg>
<doc>Pass only if consecutively 1 times in a row with 60 between attempts: ${getter} creates data and ${safe_validator} passes. Validator updates its state even if it reports failure. Always return validator state, status and message.</doc>
<status status="PASS" start="2026-04-18T03:22:49.421106" elapsed="3.849868"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:22:53.271175" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:22:53.271066" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:53.271047" elapsed="0.000195"/>
</if>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:22:53.272716" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:22:53.272801" level="FAIL">'Validator failed: Data value has changed.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:22:53.272395" elapsed="0.000478">'Validator failed: Data value has changed.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:22:53.272975" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:22:53.273019" level="INFO">${result} = 'Validator failed: Data value has changed.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:22:53.272003" elapsed="0.001039"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:22:53.273226" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:22:53.273116" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:53.273097" elapsed="0.000196"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:22:53.273725" level="INFO">@{message_chunks} = [ Validator failed: Data value has changed. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:22:53.273444" elapsed="0.000310"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:22:53.276878" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:22:53.276954" level="FAIL">'Validator failed: Data value has changed.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:22:53.274257" elapsed="0.002758">'Validator failed: Data value has changed.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:22:53.277118" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:22:53.277162" level="INFO">${result} = 'Validator failed: Data value has changed.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:22:53.273920" elapsed="0.003265"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:22:53.277369" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-18T03:22:53.277260" elapsed="0.000169"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:53.277242" elapsed="0.000211"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:53.277619" elapsed="0.000022"/>
</kw>
<arg>${result}</arg>
<arg>Not possible to succeed within the deadline.</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:22:53.271513" elapsed="0.006259"/>
</kw>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:22:53.279051" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:22:53.279125" level="FAIL">'Validator failed: Data value has changed.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:22:53.278794" elapsed="0.000389">'Validator failed: Data value has changed.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:22:53.279300" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:22:53.279350" level="INFO">${result} = 'Validator failed: Data value has changed.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:22:53.278434" elapsed="0.000940"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:22:53.279643" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:22:53.279459" elapsed="0.000245"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:53.279431" elapsed="0.000301"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:22:53.280277" level="INFO">@{message_chunks} = [ Validator failed: Data value has changed. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:22:53.279936" elapsed="0.000379"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:22:53.284392" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:22:53.284567" level="FAIL">'Validator failed: Data value has changed.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:22:53.281005" elapsed="0.003678">'Validator failed: Data value has changed.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:22:53.284975" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:22:53.285059" level="INFO">${result} = 'Validator failed: Data value has changed.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:22:53.280550" elapsed="0.004554"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:22:53.285482" elapsed="0.000081"/>
</return>
<status status="PASS" start="2026-04-18T03:22:53.285263" elapsed="0.000373"/>
</branch>
<status status="PASS" start="2026-04-18T03:22:53.285222" elapsed="0.000451"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:22:53.285902" elapsed="0.000032"/>
</kw>
<arg>${result}</arg>
<arg>Getter failed</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:22:53.278056" elapsed="0.008069"/>
</kw>
<kw name="Sleep" owner="BuiltIn">
<msg time="2026-04-18T03:23:53.287214" level="INFO">Slept 1 minute.</msg>
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="PASS" start="2026-04-18T03:22:53.286387" elapsed="60.001257"/>
</kw>
<var name="${try}">1</var>
<status status="PASS" start="2026-04-18T03:22:49.420417" elapsed="63.867358"/>
</iter>
<iter>
<kw name="Getter_And_Safe_Stateful_Validator_Have_To_Succeed_Consecutively_By_Deadline" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:23:53.292148" level="INFO">${result} = No result yet.</msg>
<var>${result}</var>
<arg>No result yet.</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:23:53.291475" elapsed="0.000734"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:23:53.293300" level="INFO">${state} = 0</msg>
<var>${state}</var>
<arg>${initial_state}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:23:53.292597" elapsed="0.000760"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:23:53.294584" level="INFO">${sleeps} = 0</msg>
<var>${sleeps}</var>
<arg>${count} - 1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:23:53.293746" elapsed="0.000899"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:23:53.298220" level="INFO">${date_now} = 2026-04-18 03:23:53.298</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:23:53.297852" elapsed="0.000428"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:23:53.299515" level="INFO">${time_deadline} = 916.118</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:23:53.298684" elapsed="0.000923"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:23:53.300918" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:23:53.299976" elapsed="0.001005"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.301742" elapsed="0.000048"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:23:53.301148" elapsed="0.000719"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:53.301100" elapsed="0.000808"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:23:53.296088" elapsed="0.005871"/>
</kw>
<msg time="2026-04-18T03:23:53.302060" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:23:53.302104" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:23:53.295044" elapsed="0.007082"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:23:53.302314" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:23:53.302207" elapsed="0.000160"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:53.302189" elapsed="0.000199"/>
</if>
<for flavor="IN RANGE">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_As_Is" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:23:53.305118" level="INFO">${keyword} = Get_Ipv4_Topology_Count</msg>
<msg time="2026-04-18T03:23:53.305166" level="INFO">${args} = []</msg>
<msg time="2026-04-18T03:23:53.305214" level="INFO">${kwargs} = {'session': 'operational', 'topology': 'example-ipv4-topology'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:23:53.304729" elapsed="0.000508"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Get_Ipv4_Topology_Count" owner="PrefixCounting">
<kw name="Get_Ipv4_Topology" owner="PrefixCounting">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:23:53.321830" level="INFO">GET Request : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01agv6blx930rdupfsp7wkuo902.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-18T03:23:53.322113" level="INFO">GET Response : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '293'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xmlns="urn:opendaylight:params:xml:ns:yang:odl-bgp-topology-types"/&gt;&lt;/topology-types&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-04-18T03:23:53.330764" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${PC_NW_TOPOLOGY}=${topology}?content=nonconfig</arg>
<arg>expected_status=anything</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-18T03:23:53.308121" elapsed="0.022727"/>
</kw>
<if>
<branch type="IF" condition="${response.status_code} != 200">
<kw name="Fail" owner="BuiltIn">
<arg>Get on ${topology} returned status code ${response.status_code} with message: ${response.text}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.334992" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:23:53.331118" elapsed="0.003986"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:53.331031" elapsed="0.004139"/>
</if>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-18T03:23:53.335315" elapsed="0.000106"/>
</return>
<msg time="2026-04-18T03:23:53.339020" level="INFO">${topology} = &lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xml...</msg>
<var>${topology}</var>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>GET the example-ipv4-topology data, check status is 200, return the topology data.</doc>
<status status="PASS" start="2026-04-18T03:23:53.307144" elapsed="0.032000"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:23:53.341058" level="INFO">${prefix_count} = 0</msg>
<var>${prefix_count}</var>
<arg>len(re.findall('"prefix":"', '''${topology}'''))</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:23:53.339513" elapsed="0.001652"/>
</kw>
<return>
<value>${prefix_count}</value>
<status status="PASS" start="2026-04-18T03:23:53.341287" elapsed="0.000044"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Get topology. If not fail, return number of prefixes in the topology.</doc>
<status status="PASS" start="2026-04-18T03:23:53.305910" elapsed="0.035899"/>
</kw>
<msg time="2026-04-18T03:23:53.341911" level="INFO">${result} = 0</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:23:53.305407" elapsed="0.036528"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:23:53.341983" elapsed="0.000027"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure without affecting arguments.</doc>
<status status="PASS" start="2026-04-18T03:23:53.304347" elapsed="0.037756"/>
</kw>
<msg time="2026-04-18T03:23:53.342196" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:23:53.342239" level="INFO">${message} = 0</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:23:53.303824" elapsed="0.038438"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:23:53.342427" elapsed="0.031235"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:23:53.374734" elapsed="0.000037"/>
</return>
<status status="PASS" start="2026-04-18T03:23:53.374593" elapsed="0.000241"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:53.374568" elapsed="0.000292"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.375053" elapsed="0.000022"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with 0.</doc>
<status status="PASS" start="2026-04-18T03:23:53.374137" elapsed="0.001000"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:23:53.375181" elapsed="0.000026"/>
</return>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:23:53.303404" elapsed="0.071900"/>
</kw>
<msg time="2026-04-18T03:23:53.375424" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:23:53.375471" level="INFO">${data} = 0</msg>
<var>${status}</var>
<var>${data}</var>
<arg>ScalarClosures.Run_Keyword_And_Collect_Garbage</arg>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:23:53.302979" elapsed="0.072514"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Getter failed: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:23:53.375691" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:23:53.375585" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:53.375566" elapsed="0.000196"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:23:53.377331" level="INFO">${date_now} = 2026-04-18 03:23:53.377</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:23:53.377143" elapsed="0.000216"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:23:53.377910" level="INFO">${time_deadline} = 916.039</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:23:53.377512" elapsed="0.000424"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:23:53.378494" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:23:53.378099" elapsed="0.000421"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.378863" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:23:53.378611" elapsed="0.000306"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:53.378591" elapsed="0.000350"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:23:53.376445" elapsed="0.002544"/>
</kw>
<msg time="2026-04-18T03:23:53.379089" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:23:53.379133" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:23:53.375939" elapsed="0.003217"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:23:53.379472" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:23:53.379362" elapsed="0.000175"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:53.379343" elapsed="0.000219"/>
</if>
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_After_Replacing_First_Two_Arguments" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:23:53.381669" level="INFO">${keyword} = WaitUtils.Excluding_Stability_Safe_Stateful_Validator_As_Keyword</msg>
<msg time="2026-04-18T03:23:53.381719" level="INFO">${args} = ['250000', 0]</msg>
<msg time="2026-04-18T03:23:53.381764" level="INFO">${kwargs} = {'excluded_value': '250000'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:23:53.381338" elapsed="0.000450"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>0</arg>
<arg>${arg1}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:23:53.381951" elapsed="0.000215"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>1</arg>
<arg>${arg2}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:23:53.382326" elapsed="0.000190"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Excluding_Stability_Safe_Stateful_Validator_As_Keyword" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:23:53.384284" level="INFO">${new_state} = 0</msg>
<var>${new_state}</var>
<arg>${data}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:23:53.383880" elapsed="0.000431"/>
</kw>
<if>
<branch type="IF" condition="${data} == ${excluded_value}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Got the excluded value.</value>
<status status="NOT RUN" start="2026-04-18T03:23:53.384579" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:23:53.384384" elapsed="0.000249"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:53.384364" elapsed="0.000292"/>
</if>
<if>
<branch type="IF" condition="${data} != ${old_state}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Data value has changed.</value>
<status status="NOT RUN" start="2026-04-18T03:23:53.384967" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:23:53.384709" elapsed="0.000308"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:53.384694" elapsed="0.000345"/>
</if>
<return>
<value>${new_state}</value>
<value>PASS</value>
<value>Validated stable: ${data}</value>
<status status="PASS" start="2026-04-18T03:23:53.385070" elapsed="0.000032"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Report failure if got the excluded value or if data value changed from last time. Useful to become validator.</doc>
<status status="PASS" start="2026-04-18T03:23:53.383400" elapsed="0.001840"/>
</kw>
<msg time="2026-04-18T03:23:53.385325" level="INFO">${result} = [0, 'PASS', 'Validated stable: 0']</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:23:53.382698" elapsed="0.002652"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:23:53.385398" elapsed="0.000025"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure with replaced first two positional arguments.</doc>
<status status="PASS" start="2026-04-18T03:23:53.380946" elapsed="0.004568"/>
</kw>
<msg time="2026-04-18T03:23:53.385625" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:23:53.385669" level="INFO">${message} = [0, 'PASS', 'Validated stable: 0']</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:23:53.380276" elapsed="0.005417"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:23:53.385859" elapsed="0.025042"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:23:53.411880" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-04-18T03:23:53.411749" elapsed="0.000199"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:53.411726" elapsed="0.000247"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.412136" elapsed="0.000022"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with [0, 'PASS', 'Validated stable: 0'].</doc>
<status status="PASS" start="2026-04-18T03:23:53.411328" elapsed="0.000889"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:23:53.412261" elapsed="0.000027"/>
</return>
<msg time="2026-04-18T03:23:53.412432" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:23:53.412478" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:23:53.412518" level="INFO">${result} = Validated stable: 0</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>ScalarClosures.Run_Closure_After_Replacing_First_Two_Arguments</arg>
<arg>${safe_validator}</arg>
<arg>${state}</arg>
<arg>${data}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:23:53.379801" elapsed="0.032757"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Validator failed: ${result}</value>
<status status="NOT RUN" start="2026-04-18T03:23:53.412768" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:23:53.412641" elapsed="0.000176"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:53.412623" elapsed="0.000216"/>
</if>
<if>
<branch type="IF" condition="${sleeps_left} &lt;= 0">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:23:53.412992" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-04-18T03:23:53.412891" elapsed="0.000164"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:53.412876" elapsed="0.000203"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.413239" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:23:53.413373" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:23:53.413339" elapsed="0.000155"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:23:53.413322" elapsed="0.000197"/>
</if>
<kw name="Sleep" owner="BuiltIn">
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.413679" elapsed="0.000021"/>
</kw>
<var name="${sleeps_left}">0</var>
<status status="PASS" start="2026-04-18T03:23:53.302831" elapsed="0.110903"/>
</iter>
<var>${sleeps_left}</var>
<value>${count}-1</value>
<value>-1</value>
<value>-1</value>
<status status="PASS" start="2026-04-18T03:23:53.302427" elapsed="0.111343"/>
</for>
<kw name="Fail" owner="BuiltIn">
<arg>Logic error, we should have returned before.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.413929" elapsed="0.000021"/>
</kw>
<msg time="2026-04-18T03:23:53.414144" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:23:53.414189" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:23:53.414229" level="INFO">${result} = Validated stable: 0</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>count=${count}</arg>
<arg>getter=${getter}</arg>
<arg>safe_validator=${safe_validator}</arg>
<arg>initial_state=${state}</arg>
<doc>Pass only if consecutively 1 times in a row with 60 between attempts: ${getter} creates data and ${safe_validator} passes. Validator updates its state even if it reports failure. Always return validator state, status and message.</doc>
<status status="PASS" start="2026-04-18T03:23:53.289695" elapsed="0.124557"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:23:53.414443" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-18T03:23:53.414340" elapsed="0.000161"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:53.414322" elapsed="0.000219"/>
</if>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<arg>${result}</arg>
<arg>Not possible to succeed within the deadline.</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.414816" elapsed="0.000025"/>
</kw>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<arg>${result}</arg>
<arg>Getter failed</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.415108" elapsed="0.000023"/>
</kw>
<kw name="Sleep" owner="BuiltIn">
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.415283" elapsed="0.000020"/>
</kw>
<var name="${try}">2</var>
<status status="PASS" start="2026-04-18T03:23:53.288273" elapsed="0.127062"/>
</iter>
<var>${try}</var>
<value>1</value>
<value>${maximum_sleeps}+2</value>
<status status="PASS" start="2026-04-18T03:22:49.420163" elapsed="63.995204"/>
</for>
<kw name="Fail" owner="BuiltIn">
<arg>Logic error, we should have returned before.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.415515" elapsed="0.000036"/>
</kw>
<msg time="2026-04-18T03:23:53.415681" level="INFO">${result} = Validated stable: 0</msg>
<var>${result}</var>
<arg>timeout=${timeout}</arg>
<arg>period=${period}</arg>
<arg>count=${repetitions}</arg>
<arg>getter=${getter}</arg>
<arg>safe_validator=${validator}</arg>
<arg>initial_state=${excluded_count}</arg>
<doc>Analogue of Wait Until Keyword Succeeds, but it passes state of validator around and exits early on getter failure. Calls GASSVHTSCBD to verify data is "stable".</doc>
<status status="PASS" start="2026-04-18T03:22:49.411805" elapsed="64.003901"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:23:53.415763" elapsed="0.000026"/>
</return>
<arg>timeout=${bgp_filling_timeout}</arg>
<arg>period=${CHECK_PERIOD_PREFIX_COUNT_SINGLE}</arg>
<arg>repetitions=${REPETITIONS_PREFIX_COUNT_SINGLE}</arg>
<arg>excluded_count=${COUNT_PREFIX_COUNT_SINGLE}</arg>
<doc>Each ${period} get prefix count. When called with shard list, the check is done before the count is get. After 1 of stable different from ${excluded_count} within ${timeout}, Return validator output. Fail early on getter error.</doc>
<status status="PASS" start="2026-04-18T03:22:49.402544" elapsed="64.013337"/>
</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">
<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-04-18T03:23:53.416472" elapsed="0.000312"/>
</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-04-18T03:23:53.417647" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:23:53.417219" elapsed="0.000490"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:53.417202" elapsed="0.000532"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>'${SetupUtils__Known_Bug_ID}' != ''</arg>
<arg>Set_Known_Bug_Id</arg>
<arg>${EMPTY}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:23:53.417883" elapsed="0.000318"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:23:53.423393" level="INFO">${test_skipped} = False</msg>
<var>${test_skipped}</var>
<arg>len(re.findall('SKIPPED', """${TEST_MESSAGE}""")) &gt; 0</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:23:53.422971" elapsed="0.000450"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-04-18T03:23:53.423662" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-18T03:23:53.423496" elapsed="0.000223"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:53.423477" elapsed="0.000265"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.423892" elapsed="0.000022"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<var>${reference}</var>
<arg>${SUITE_NAME}_${TEST_NAME}</arg>
<arg>[ /\.-]</arg>
<arg>_</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.424066" elapsed="0.000020"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.424239" elapsed="0.000020"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${msg}</var>
<arg>... click for list of related bugs or create a new one if needed (with the${newline}"${reference}"${newline}reference somewhere inside)</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.424407" elapsed="0.000020"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${bugs}</var>
<arg>"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=${reference}&amp;order=bug_status"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.424637" 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-04-18T03:23:53.424847" elapsed="0.000020"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.425015" elapsed="0.000019"/>
</kw>
<doc>Report that a test failed and point to linked Bugzilla bug(s).
Linked bugs must contain the ${reference} inside comments (workaround
becasue of currently missing suitable field for external references and
not correctly working the CONTENT MATCHES filter).
Not FAILED (incl. SKIPPED) test are not reported.
This keyword must be used in the [Teardown] setting of the affected test
or as the first line of the test if FastFail module is not being
used. It reports the URL of the bug on console and also puts it
into the Robot log file.</doc>
<status status="PASS" start="2026-04-18T03:23:53.422598" elapsed="0.002492"/>
</kw>
<status status="PASS" start="2026-04-18T03:23:53.417008" elapsed="0.008134"/>
</kw>
<doc>Test case teardown. Show linked bugs and start fast failing in case of failure.</doc>
<status status="PASS" start="2026-04-18T03:23:53.416165" elapsed="0.009019"/>
</kw>
<doc>Wait until example-ipv4-topology becomes stable again.</doc>
<tag>critical</tag>
<status status="PASS" start="2026-04-18T03:22:49.298340" elapsed="64.126883"/>
</test>
<test id="s1-s2-t9" name="Check_For_Empty_Ipv4_Topology_After_Talking" 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-04-18T03:23:53.428568" elapsed="0.000275"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-18T03:23:53.428289" 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-04-18T03:23:53.429909" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:23:53.429798" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:53.429779" elapsed="0.000199"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:23:53.434775" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:23:53.434668" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:53.434650" elapsed="0.000194"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-18T03:23:53.435860" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-18T03:23:53.435452" elapsed="0.000438"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-18T03:23:53.436352" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-18T03:23:53.436054" elapsed="0.000326"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-18T03:23:53.436425" elapsed="0.000030"/>
</return>
<msg time="2026-04-18T03:23:53.436598" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-18T03:23:53.435073" elapsed="0.001551"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:23:53.442262" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:23:53.442154" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:53.442134" elapsed="0.000198"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:23:53.443545" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:23:53.443418" elapsed="0.000175"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:53.443399" elapsed="0.000216"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-18T03:23:53.444065" level="INFO">${karaf_connection_index} = 4</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-18T03:23:53.443762" elapsed="0.000330"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-18T03:23:53.444467" level="INFO">${current_connection_index} = 7</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:23:53.444252" elapsed="0.000241"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-18T03:23:53.484999" 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 "b "g "p "c "e "p "- "b "g "p "- "i "n "g "e "s "t "[78C- "[A[78Cm</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-18T03:23:53.445088" elapsed="0.040133"/>
</kw>
<msg time="2026-04-18T03:23:53.485457" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-18T03:23:53.485506" 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 "b "g "p "c "e "p "- "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:23:53.444727" elapsed="0.040842"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-18T03:23:53.529101" level="INFO">"i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "C "h "e "c "k "_ "F "o "r "_ "E "m "p "t "y "_ "I "p "v "4 "_ "T "o "p "o "l "o "g "y "_ "A "f "t "e "r "_ "T "a "l "k "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-04-18T03:23:53.486263" elapsed="0.043131"/>
</kw>
<msg time="2026-04-18T03:23:53.529668" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-18T03:23:53.529719" level="INFO">${message_wait} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "C "h "e "c "k "_ "F "...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:23:53.485817" elapsed="0.043942"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.530173" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:23:53.529869" elapsed="0.000364"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:53.529835" elapsed="0.000425"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:23:53.530801" level="INFO"> "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "C "h "e "c "k "_ "F "o "r "_ "E "m "p "t "y "_ "I "p "v "4 "_ "T "o "p "o "l "o "g "y "_ "A "f "t "e "r "_ "T "a "l "k "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-04-18T03:23:53.530410" 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-04-18T03:23:53.531185" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:23:53.530959" elapsed="0.000282"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:53.530939" elapsed="0.000326"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-18T03:23:53.531303" elapsed="0.000038"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:23:53.534026" elapsed="0.000151"/>
</kw>
<msg time="2026-04-18T03:23:53.534241" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:23:53.532936" elapsed="0.001446"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.534686" elapsed="0.000082"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.535038" elapsed="0.000081"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-18T03:23:53.532222" elapsed="0.003013"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-18T03:23:53.531639" elapsed="0.003662"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-18T03:23:53.443117" elapsed="0.092283"/>
</kw>
<msg time="2026-04-18T03:23:53.535497" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:23:53.535558" level="INFO">${message} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "C "h "e "c "k "_ "F "...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:23:53.442486" elapsed="0.093112"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:23:53.535814" elapsed="0.000033"/>
</return>
<status status="PASS" start="2026-04-18T03:23:53.535679" elapsed="0.000205"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:53.535658" elapsed="0.000251"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.536335" elapsed="0.000027"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.536746" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:23:53.536820" elapsed="0.000017"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-18T03:23:53.441811" elapsed="0.095121"/>
</kw>
<msg time="2026-04-18T03:23:53.537029" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:23:53.537073" level="INFO">${output} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "C "h "e "c "k "_ "F "...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:23:53.437017" elapsed="0.100097"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.537447" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:23:53.537190" elapsed="0.000310"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:53.537172" elapsed="0.000351"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-18T03:23:53.436869" elapsed="0.100695"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-18T03:23:53.436692" elapsed="0.100907"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-18T03:23:53.434297" elapsed="0.103359"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-18T03:23:53.429495" elapsed="0.108262"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:23:53.429064" elapsed="0.108741"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-18T03:23:53.426142" elapsed="0.111721"/>
</kw>
<kw name="Check_Ipv4_Topology_Is_Empty" owner="PrefixCounting">
<kw name="Check_Ipv4_Topology_Count" owner="PrefixCounting">
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get_Ipv4_Topology_Count" owner="PrefixCounting">
<kw name="Get_Ipv4_Topology" owner="PrefixCounting">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:23:53.549865" level="INFO">GET Request : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01agv6blx930rdupfsp7wkuo902.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-18T03:23:53.550052" level="INFO">GET Response : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '293'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xmlns="urn:opendaylight:params:xml:ns:yang:odl-bgp-topology-types"/&gt;&lt;/topology-types&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-04-18T03:23:53.550211" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${PC_NW_TOPOLOGY}=${topology}?content=nonconfig</arg>
<arg>expected_status=anything</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-18T03:23:53.541216" elapsed="0.009031"/>
</kw>
<if>
<branch type="IF" condition="${response.status_code} != 200">
<kw name="Fail" owner="BuiltIn">
<arg>Get on ${topology} returned status code ${response.status_code} with message: ${response.text}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.553647" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:23:53.550359" elapsed="0.003373"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:53.550331" elapsed="0.003435"/>
</if>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-18T03:23:53.553813" elapsed="0.000043"/>
</return>
<msg time="2026-04-18T03:23:53.557505" level="INFO">${topology} = &lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xml...</msg>
<var>${topology}</var>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>GET the example-ipv4-topology data, check status is 200, return the topology data.</doc>
<status status="PASS" start="2026-04-18T03:23:53.540781" elapsed="0.016798"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:23:53.558629" level="INFO">${prefix_count} = 0</msg>
<var>${prefix_count}</var>
<arg>len(re.findall('"prefix":"', '''${topology}'''))</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:23:53.557870" elapsed="0.000812"/>
</kw>
<return>
<value>${prefix_count}</value>
<status status="PASS" start="2026-04-18T03:23:53.558772" elapsed="0.000052"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Get topology. If not fail, return number of prefixes in the topology.</doc>
<status status="PASS" start="2026-04-18T03:23:53.540206" elapsed="0.018775"/>
</kw>
<msg time="2026-04-18T03:23:53.559136" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:23:53.559209" level="INFO">${message} = 0</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:23:53.539707" elapsed="0.019536"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:23:53.559547" elapsed="0.029538"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:23:53.590260" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-04-18T03:23:53.590128" elapsed="0.000201"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:53.590104" elapsed="0.000250"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.590522" elapsed="0.000039"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with 0.</doc>
<status status="PASS" start="2026-04-18T03:23:53.589713" elapsed="0.000909"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:23:53.590666" elapsed="0.000027"/>
</return>
<msg time="2026-04-18T03:23:53.590822" level="INFO">${actual_count} = 0</msg>
<var>${actual_count}</var>
<arg>Get_Ipv4_Topology_Count</arg>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:23:53.538992" elapsed="0.051857"/>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<msg time="2026-04-18T03:23:53.591344" level="INFO">Argument types are:
&lt;class 'int'&gt;
&lt;class 'str'&gt;</msg>
<arg>${actual_count}</arg>
<arg>${expected_count}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="PASS" start="2026-04-18T03:23:53.591009" elapsed="0.000400"/>
</kw>
<arg>0</arg>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>Check that the count of prefixes matches the expected count. Fails if it does not. In either case, collect garbage.</doc>
<status status="PASS" start="2026-04-18T03:23:53.538430" elapsed="0.053038"/>
</kw>
<doc>Example_Ipv4_Topology has to give status 200 with zero prefixes.</doc>
<status status="PASS" start="2026-04-18T03:23:53.538080" elapsed="0.053444"/>
</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">
<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-04-18T03:23:53.592129" elapsed="0.000248"/>
</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-04-18T03:23:53.593333" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:23:53.592873" elapsed="0.000523"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:53.592852" elapsed="0.000570"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>'${SetupUtils__Known_Bug_ID}' != ''</arg>
<arg>Set_Known_Bug_Id</arg>
<arg>${EMPTY}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:23:53.593591" elapsed="0.000325"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:23:53.599007" level="INFO">${test_skipped} = False</msg>
<var>${test_skipped}</var>
<arg>len(re.findall('SKIPPED', """${TEST_MESSAGE}""")) &gt; 0</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:23:53.598553" elapsed="0.000484"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-04-18T03:23:53.599268" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-04-18T03:23:53.599118" elapsed="0.000215"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:53.599097" 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-04-18T03:23:53.599511" elapsed="0.000046"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<var>${reference}</var>
<arg>${SUITE_NAME}_${TEST_NAME}</arg>
<arg>[ /\.-]</arg>
<arg>_</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.599715" elapsed="0.000021"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.599891" elapsed="0.000020"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${msg}</var>
<arg>... click for list of related bugs or create a new one if needed (with the${newline}"${reference}"${newline}reference somewhere inside)</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.600062" elapsed="0.000020"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${bugs}</var>
<arg>"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=${reference}&amp;order=bug_status"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.600231" elapsed="0.000021"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.600400" elapsed="0.000020"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.600616" elapsed="0.000022"/>
</kw>
<doc>Report that a test failed and point to linked Bugzilla bug(s).
Linked bugs must contain the ${reference} inside comments (workaround
becasue of currently missing suitable field for external references and
not correctly working the CONTENT MATCHES filter).
Not FAILED (incl. SKIPPED) test are not reported.
This keyword must be used in the [Teardown] setting of the affected test
or as the first line of the test if FastFail module is not being
used. It reports the URL of the bug on console and also puts it
into the Robot log file.</doc>
<status status="PASS" start="2026-04-18T03:23:53.598198" elapsed="0.002498"/>
</kw>
<status status="PASS" start="2026-04-18T03:23:53.592656" elapsed="0.008092"/>
</kw>
<doc>Test case teardown. Show linked bugs and start fast failing in case of failure.</doc>
<status status="PASS" start="2026-04-18T03:23:53.591819" elapsed="0.008972"/>
</kw>
<doc>Example-ipv4-topology should be empty now.</doc>
<tag>critical</tag>
<status status="PASS" start="2026-04-18T03:23:53.425631" elapsed="0.175205"/>
</test>
<test id="s1-s2-t10" name="Start_Listening_BGP_Speaker" line="155">
<kw name="Setup_Test_With_Logging_And_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Fail_This_Fast_On_Previous_Error" owner="FailFast">
<if>
<branch type="IF" condition="'''${SuiteFastFail}'''=='True'">
<kw name="Fail" owner="BuiltIn">
<arg>SKIPPED due to a failure in a previous fundamental test case.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.604467" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:23:53.604237" elapsed="0.000328"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:53.604217" elapsed="0.000373"/>
</if>
<doc>Mark (immediately) this test case as failed when fast-fail is enabled in suite.</doc>
<status status="PASS" start="2026-04-18T03:23:53.604049" elapsed="0.000590"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:23:53.605678" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:23:53.605567" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:53.605548" elapsed="0.000200"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:23:53.610626" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:23:53.610496" elapsed="0.000178"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:53.610477" elapsed="0.000220"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-18T03:23:53.611748" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-18T03:23:53.611325" elapsed="0.000450"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-18T03:23:53.612240" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-18T03:23:53.611938" elapsed="0.000327"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-18T03:23:53.612309" elapsed="0.000034"/>
</return>
<msg time="2026-04-18T03:23:53.612516" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-18T03:23:53.610940" elapsed="0.001617"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:23:53.618088" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:23:53.617970" elapsed="0.000169"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:53.617949" elapsed="0.000213"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:23:53.619437" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:23:53.619325" elapsed="0.000160"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:53.619306" elapsed="0.000202"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-18T03:23:53.620019" level="INFO">${karaf_connection_index} = 4</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-18T03:23:53.619692" elapsed="0.000355"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-18T03:23:53.620432" level="INFO">${current_connection_index} = 7</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:23:53.620211" elapsed="0.000285"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-18T03:23:53.659238" 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 "b "g "p "c "e "p "- "b "g "p "- "i "n "g "e "s "t "[78C- "[A[78Cm</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-18T03:23:53.621023" elapsed="0.038647"/>
</kw>
<msg time="2026-04-18T03:23:53.659876" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-18T03:23:53.659923" 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 "b "g "p "c "e "p "- "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:23:53.620678" elapsed="0.039282"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-18T03:23:53.683216" level="INFO">"i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "S "t "a "r "t "_ "L "i "s "t "e "n "i "n "g "_ "B "G "P "_ "S "p "e "a "k "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-18T03:23:53.660623" elapsed="0.022716"/>
</kw>
<msg time="2026-04-18T03:23:53.683520" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-18T03:23:53.683593" level="INFO">${message_wait} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "S "t "a "r "t "_ "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-04-18T03:23:53.660177" elapsed="0.023455"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.683979" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:23:53.683728" elapsed="0.000307"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:53.683700" elapsed="0.000363"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:23:53.684584" level="INFO"> "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "S "t "a "r "t "_ "L "i "s "t "e "n "i "n "g "_ "B "G "P "_ "S "p "e "a "k "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:23:53.684209" elapsed="0.000452"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.684958" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:23:53.684731" elapsed="0.000283"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:53.684712" elapsed="0.000325"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-18T03:23:53.685074" elapsed="0.000038"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:23:53.687997" elapsed="0.000192"/>
</kw>
<msg time="2026-04-18T03:23:53.688271" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:23:53.686688" elapsed="0.001812"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.688905" elapsed="0.000102"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.689316" elapsed="0.000081"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-18T03:23:53.685987" elapsed="0.003561"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-18T03:23:53.685384" elapsed="0.004234"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-18T03:23:53.619009" elapsed="0.070719"/>
</kw>
<msg time="2026-04-18T03:23:53.689865" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:23:53.689928" level="INFO">${message} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "S "t "a "r "t "_ "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-04-18T03:23:53.618326" elapsed="0.071643"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:23:53.690228" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-18T03:23:53.690114" elapsed="0.000174"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:53.690093" elapsed="0.000220"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.690775" elapsed="0.000026"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.691125" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:23:53.691197" elapsed="0.000016"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-18T03:23:53.617611" elapsed="0.073695"/>
</kw>
<msg time="2026-04-18T03:23:53.691400" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:23:53.691454" level="INFO">${output} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "S "t "a "r "t "_ "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-04-18T03:23:53.613022" elapsed="0.078473"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.691855" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:23:53.691595" elapsed="0.000320"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:53.691576" elapsed="0.000362"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-18T03:23:53.612868" elapsed="0.079094"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-18T03:23:53.612683" elapsed="0.079312"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-18T03:23:53.610119" elapsed="0.081933"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-18T03:23:53.605260" elapsed="0.086848"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:23:53.604794" elapsed="0.087362"/>
</kw>
<doc>Test case setup which skips on previous failure. If not, logs test case name to Karaf log.
Recommended to be used as the default test case setup.</doc>
<status status="PASS" start="2026-04-18T03:23:53.601661" elapsed="0.090550"/>
</kw>
<kw name="Start_BGP_Speaker" owner="BGPSpeaker">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:23:53.693501" level="INFO">${command} = python3 play.py --amount 250000 --listen --myip=10.30.170.251 --myport=17900 --peerip=10.30.170.68 --insert=10 --withdraw=9 --prefill 10 --update single --info --results bgp.csv &amp;&gt; play.py.out</msg>
<var>${command}</var>
<arg>python3 play.py ${arguments} &amp;&gt; ${BGPSpeaker__OUTPUT_LOG}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:23:53.693154" elapsed="0.000396"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:23:53.694041" level="INFO">python3 play.py --amount 250000 --listen --myip=10.30.170.251 --myport=17900 --peerip=10.30.170.68 --insert=10 --withdraw=9 --prefill 10 --update single --info --results bgp.csv &amp;&gt; play.py.out</msg>
<arg>${command}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:23:53.693740" elapsed="0.000351"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-18T03:23:53.699180" level="INFO">python3 play.py --amount 250000 --listen --myip=10.30.170.251 --myport=17900 --peerip=10.30.170.68 --insert=10 --withdraw=9 --prefill 10 --update single --info --results bgp.csv &amp;&gt; play.py.out</msg>
<msg time="2026-04-18T03:23:53.699278" level="INFO">${output} =  python3 play.py --amount 250000 --listen --myip=10.30.170.251 --myport=17900 --peerip=10.30.170.68 --insert=10 --withdraw=9 --prefill 10 --update single --info --results bgp.csv &amp;&gt; play.py.out
</msg>
<var>${output}</var>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-18T03:23:53.694247" elapsed="0.005059"/>
</kw>
<arg>--amount ${COUNT_PREFIX_COUNT_SINGLE} --listen --myip=${TOOLS_SYSTEM_IP} --myport=${BGP_TOOL_PORT} --peerip=${ODL_SYSTEM_IP} --insert=${INSERT} --withdraw=${WITHDRAW} --prefill ${PREFILL} --update ${UPDATE} --${BGP_TOOL_LOG_LEVEL} --results ${RESULTS_FILE_NAME}</arg>
<doc>Start the BGP speaker python utility. Redirect its error output to a log file
so it can be dumped into the logs later, when stopping it. This also avoids polluting the
output seen by "Read Until Prompt" with false propmpts so it won't stop prematurely
leading to a spurious test failure, messy log content or other misbehavior.</doc>
<status status="PASS" start="2026-04-18T03:23:53.692479" elapsed="0.006888"/>
</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">
<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-04-18T03:23:53.699982" elapsed="0.000245"/>
</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-04-18T03:23:53.701220" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:23:53.700824" elapsed="0.000460"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:53.700799" 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-04-18T03:23:53.701503" elapsed="0.000337"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:23:53.707275" level="INFO">${test_skipped} = False</msg>
<var>${test_skipped}</var>
<arg>len(re.findall('SKIPPED', """${TEST_MESSAGE}""")) &gt; 0</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:23:53.706845" elapsed="0.000458"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-04-18T03:23:53.707552" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-04-18T03:23:53.707379" elapsed="0.000240"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:53.707360" elapsed="0.000284"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.707797" elapsed="0.000022"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<var>${reference}</var>
<arg>${SUITE_NAME}_${TEST_NAME}</arg>
<arg>[ /\.-]</arg>
<arg>_</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.707978" elapsed="0.000021"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.708157" elapsed="0.000020"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${msg}</var>
<arg>... click for list of related bugs or create a new one if needed (with the${newline}"${reference}"${newline}reference somewhere inside)</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.708327" elapsed="0.000021"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${bugs}</var>
<arg>"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=${reference}&amp;order=bug_status"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.708559" 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-04-18T03:23:53.708737" elapsed="0.000021"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.708904" elapsed="0.000019"/>
</kw>
<doc>Report that a test failed and point to linked Bugzilla bug(s).
Linked bugs must contain the ${reference} inside comments (workaround
becasue of currently missing suitable field for external references and
not correctly working the CONTENT MATCHES filter).
Not FAILED (incl. SKIPPED) test are not reported.
This keyword must be used in the [Teardown] setting of the affected test
or as the first line of the test if FastFail module is not being
used. It reports the URL of the bug on console and also puts it
into the Robot log file.</doc>
<status status="PASS" start="2026-04-18T03:23:53.706508" elapsed="0.002471"/>
</kw>
<status status="PASS" start="2026-04-18T03:23:53.700516" elapsed="0.008514"/>
</kw>
<doc>Test case teardown. Show linked bugs and start fast failing in case of failure.</doc>
<status status="PASS" start="2026-04-18T03:23:53.699669" elapsed="0.009401"/>
</kw>
<doc>Start Python speaker in listening mode.</doc>
<status status="PASS" start="2026-04-18T03:23:53.601072" elapsed="0.108038"/>
</test>
<test id="s1-s2-t11" name="Reconfigure_ODL_To_Initiate_Connection" line="160">
<kw name="Setup_Test_With_Logging_And_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Fail_This_Fast_On_Previous_Error" owner="FailFast">
<if>
<branch type="IF" condition="'''${SuiteFastFail}'''=='True'">
<kw name="Fail" owner="BuiltIn">
<arg>SKIPPED due to a failure in a previous fundamental test case.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.712828" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:23:53.712605" elapsed="0.000280"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:53.712586" elapsed="0.000323"/>
</if>
<doc>Mark (immediately) this test case as failed when fast-fail is enabled in suite.</doc>
<status status="PASS" start="2026-04-18T03:23:53.712337" elapsed="0.000618"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:23:53.714045" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:23:53.713935" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:53.713917" 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-04-18T03:23:53.719173" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:23:53.719040" elapsed="0.000192"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:53.719017" elapsed="0.000243"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-18T03:23:53.720388" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-18T03:23:53.719971" elapsed="0.000446"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-18T03:23:53.720894" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-18T03:23:53.720593" elapsed="0.000327"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-18T03:23:53.720965" elapsed="0.000030"/>
</return>
<msg time="2026-04-18T03:23:53.721120" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-18T03:23:53.719577" elapsed="0.001568"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:23:53.726812" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:23:53.726702" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:53.726682" elapsed="0.000204"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:23:53.728210" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:23:53.728059" elapsed="0.000201"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:53.728040" elapsed="0.000243"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-18T03:23:53.728801" level="INFO">${karaf_connection_index} = 4</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-18T03:23:53.728471" elapsed="0.000358"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-18T03:23:53.729296" level="INFO">${current_connection_index} = 7</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:23:53.729017" elapsed="0.000307"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-18T03:23:53.756648" 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 "b "g "p "c "e "p "- "b "g "p "- "i "n "g "e "s "t "[78C- "[A[78Cm</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-18T03:23:53.729866" elapsed="0.026902"/>
</kw>
<msg time="2026-04-18T03:23:53.756947" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-18T03:23:53.756995" 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 "b "g "p "c "e "p "- "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:23:53.729495" elapsed="0.027538"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-18T03:23:53.782450" level="INFO">"i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "R "e "c "o "n "f "i "g "u "r "e "_ "O "D "L "_ "T "o "_ "I "n "i "t "i "a "t "e "_ "C "o "n "n "e "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-04-18T03:23:53.757609" elapsed="0.025132"/>
</kw>
<msg time="2026-04-18T03:23:53.783038" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-18T03:23:53.783110" level="INFO">${message_wait} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "R "e "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-04-18T03:23:53.757219" elapsed="0.025948"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.783841" elapsed="0.000048"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:23:53.783314" elapsed="0.000636"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:53.783272" elapsed="0.000717"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:23:53.784808" level="INFO"> "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "R "e "c "o "n "f "i "g "u "r "e "_ "O "D "L "_ "T "o "_ "I "n "i "t "i "a "t "e "_ "C "o "n "n "e "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-04-18T03:23:53.784212" elapsed="0.000715"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.785394" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:23:53.785032" elapsed="0.000457"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:53.785002" elapsed="0.000550"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-18T03:23:53.785627" elapsed="0.000057"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:23:53.789805" elapsed="0.000226"/>
</kw>
<msg time="2026-04-18T03:23:53.790126" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:23:53.787991" elapsed="0.002338"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.790795" elapsed="0.000118"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.791409" elapsed="0.000158"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-18T03:23:53.786954" elapsed="0.004789"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-18T03:23:53.786075" elapsed="0.005762"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-18T03:23:53.727755" elapsed="0.064228"/>
</kw>
<msg time="2026-04-18T03:23:53.792127" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:23:53.792193" level="INFO">${message} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "R "e "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-04-18T03:23:53.727041" elapsed="0.065209"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:23:53.792646" elapsed="0.000040"/>
</return>
<status status="PASS" start="2026-04-18T03:23:53.792428" elapsed="0.000311"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:53.792396" elapsed="0.000380"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.793225" elapsed="0.000026"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.793667" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:23:53.793741" elapsed="0.000016"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-18T03:23:53.726321" elapsed="0.067533"/>
</kw>
<msg time="2026-04-18T03:23:53.793951" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:23:53.793996" level="INFO">${output} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "R "e "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-04-18T03:23:53.721520" elapsed="0.072519"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.794411" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:23:53.794138" elapsed="0.000341"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:53.794118" elapsed="0.000385"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-18T03:23:53.721373" elapsed="0.073169"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-18T03:23:53.721198" elapsed="0.073381"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-18T03:23:53.718597" elapsed="0.076042"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-18T03:23:53.713640" elapsed="0.081057"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:23:53.713106" elapsed="0.081637"/>
</kw>
<doc>Test case setup which skips on previous failure. If not, logs test case name to Karaf log.
Recommended to be used as the default test case setup.</doc>
<status status="PASS" start="2026-04-18T03:23:53.710049" elapsed="0.084748"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-18T03:23:53.796129" level="INFO">&amp;{mapping} = { DEVICE_NAME=controller-config | BGP_NAME=example-bgp-peer | IP=10.30.170.251 | HOLDTIME=180 | PEER_PORT=17900 | INITIATE=true | BGP_RIB=example-bgp-rib | PASSIVE_MODE=false | BGP_RIB_OPENCONFIG=exam...</msg>
<var>&amp;{mapping}</var>
<arg>DEVICE_NAME=${DEVICE_NAME}</arg>
<arg>BGP_NAME=${BGP_PEER_NAME}</arg>
<arg>IP=${TOOLS_SYSTEM_IP}</arg>
<arg>HOLDTIME=${HOLDTIME_PREFIX_COUNT_SINGLE}</arg>
<arg>PEER_PORT=${BGP_TOOL_PORT}</arg>
<arg>INITIATE=true</arg>
<arg>BGP_RIB=${RIB_INSTANCE}</arg>
<arg>PASSIVE_MODE=false</arg>
<arg>BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}</arg>
<arg>RIB_INSTANCE_NAME=${RIB_INSTANCE}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-18T03:23:53.794994" elapsed="0.001166"/>
</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-04-18T03:23:53.834023" level="INFO">${file_path_stream} = /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:23:53.833610" elapsed="0.000444"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-18T03:23:53.834876" level="FAIL">File '/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/variables/bgpuser/bgp_peer.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-18T03:23:53.834592" elapsed="0.000365">File '/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/variables/bgpuser/bgp_peer.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-18T03:23:53.835051" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-18T03:23:53.834228" elapsed="0.000847"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-18T03:23:53.835646" level="INFO">${file_path} = /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-18T03:23:53.835243" elapsed="0.000430"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-18T03:23:53.835978" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/variables/bgpuser/bgp_peer/location.uri"&gt;/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/variables/bgpuser/bgp_peer/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-18T03:23:53.836139" level="INFO">${template} = rests/data/openconfig-network-instance:network-instances/network-instance=global-bgp/openconfig-network-instance:protocols/protocol=openconfig-policy-types%3ABGP,$BGP_RIB_OPENCONFIG/bgp-openconfig-ext...</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-18T03:23:53.835836" elapsed="0.000330"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:23:53.836618" level="INFO">rests/data/openconfig-network-instance:network-instances/network-instance=global-bgp/openconfig-network-instance:protocols/protocol=openconfig-policy-types%3ABGP,$BGP_RIB_OPENCONFIG/bgp-openconfig-extensions:bgp/neighbors/neighbor=$IP
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:23:53.836356" elapsed="0.000309"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:23:53.837750" level="INFO">mapping: {'DEVICE_NAME': 'controller-config', 'BGP_NAME': 'example-bgp-peer', 'IP': '10.30.170.251', 'HOLDTIME': '180', 'PEER_PORT': '17900', 'INITIATE': 'true', 'BGP_RIB': 'example-bgp-rib', 'PASSIVE_MODE': 'false', 'BGP_RIB_OPENCONFIG': 'example-bgp-rib', 'RIB_INSTANCE_NAME': 'example-bgp-rib'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:23:53.837468" elapsed="0.000330"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-18T03:23:53.838226" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-18T03:23:53.837960" elapsed="0.000292"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-18T03:23:53.838947" level="INFO">${value} = controller-config</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-18T03:23:53.838650" elapsed="0.000323"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-18T03:23:53.839725" level="INFO">${encoded} = controller-config</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-18T03:23:53.839483" elapsed="0.000268"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-18T03:23:53.839802" elapsed="0.000033"/>
</return>
<msg time="2026-04-18T03:23:53.839960" level="INFO">${encoded_value} = controller-config</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-04-18T03:23:53.839164" 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-04-18T03:23:53.840142" elapsed="0.000271"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">controller-config</var>
<status status="PASS" start="2026-04-18T03:23:53.838494" elapsed="0.001960"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-18T03:23:53.841172" level="INFO">${value} = example-bgp-peer</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-18T03:23:53.840722" elapsed="0.000477"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-18T03:23:53.841935" level="INFO">${encoded} = example-bgp-peer</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-18T03:23:53.841725" elapsed="0.000236"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-18T03:23:53.842011" elapsed="0.000028"/>
</return>
<msg time="2026-04-18T03:23:53.842162" level="INFO">${encoded_value} = example-bgp-peer</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-04-18T03:23:53.841390" elapsed="0.000796"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-18T03:23:53.842338" elapsed="0.000240"/>
</kw>
<var name="${key}">BGP_NAME</var>
<var name="${value}">example-bgp-peer</var>
<status status="PASS" start="2026-04-18T03:23:53.840584" elapsed="0.002036"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-18T03:23:53.843167" level="INFO">${value} = 10.30.170.251</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-18T03:23:53.842867" elapsed="0.000327"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-18T03:23:53.843941" level="INFO">${encoded} = 10.30.170.251</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-18T03:23:53.843727" elapsed="0.000240"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-18T03:23:53.844016" elapsed="0.000030"/>
</return>
<msg time="2026-04-18T03:23:53.844169" level="INFO">${encoded_value} = 10.30.170.251</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-04-18T03:23:53.843386" 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-04-18T03:23:53.844384" elapsed="0.000239"/>
</kw>
<var name="${key}">IP</var>
<var name="${value}">10.30.170.251</var>
<status status="PASS" start="2026-04-18T03:23:53.842731" elapsed="0.001933"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-18T03:23:53.845209" level="INFO">${value} = 180</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-18T03:23:53.844912" elapsed="0.000323"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-18T03:23:53.845972" level="INFO">${encoded} = 180</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-18T03:23:53.845759" elapsed="0.000239"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-18T03:23:53.846048" elapsed="0.000029"/>
</return>
<msg time="2026-04-18T03:23:53.846201" level="INFO">${encoded_value} = 180</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-04-18T03:23:53.845424" 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-04-18T03:23:53.846381" elapsed="0.000240"/>
</kw>
<var name="${key}">HOLDTIME</var>
<var name="${value}">180</var>
<status status="PASS" start="2026-04-18T03:23:53.844777" elapsed="0.001885"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-18T03:23:53.847215" level="INFO">${value} = 17900</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-18T03:23:53.846913" elapsed="0.000328"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-18T03:23:53.847982" level="INFO">${encoded} = 17900</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-18T03:23:53.847768" elapsed="0.000240"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-18T03:23:53.848128" elapsed="0.000030"/>
</return>
<msg time="2026-04-18T03:23:53.848302" level="INFO">${encoded_value} = 17900</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-04-18T03:23:53.847432" elapsed="0.000895"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-18T03:23:53.848480" elapsed="0.000238"/>
</kw>
<var name="${key}">PEER_PORT</var>
<var name="${value}">17900</var>
<status status="PASS" start="2026-04-18T03:23:53.846776" elapsed="0.001983"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-18T03:23:53.849311" level="INFO">${value} = true</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-18T03:23:53.849009" elapsed="0.000329"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-18T03:23:53.850085" level="INFO">${encoded} = true</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-18T03:23:53.849867" elapsed="0.000244"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-18T03:23:53.850162" elapsed="0.000029"/>
</return>
<msg time="2026-04-18T03:23:53.850313" level="INFO">${encoded_value} = true</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-04-18T03:23:53.849544" 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-04-18T03:23:53.850494" elapsed="0.000240"/>
</kw>
<var name="${key}">INITIATE</var>
<var name="${value}">true</var>
<status status="PASS" start="2026-04-18T03:23:53.848872" elapsed="0.001904"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-18T03:23:53.851326" level="INFO">${value} = example-bgp-rib</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-18T03:23:53.851026" elapsed="0.000326"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-18T03:23:53.852326" level="INFO">${encoded} = example-bgp-rib</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-18T03:23:53.852066" elapsed="0.000287"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-18T03:23:53.852404" elapsed="0.000028"/>
</return>
<msg time="2026-04-18T03:23:53.852569" level="INFO">${encoded_value} = example-bgp-rib</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-04-18T03:23:53.851558" elapsed="0.001038"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-18T03:23:53.852750" elapsed="0.000223"/>
</kw>
<var name="${key}">BGP_RIB</var>
<var name="${value}">example-bgp-rib</var>
<status status="PASS" start="2026-04-18T03:23:53.850891" elapsed="0.002121"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-18T03:23:53.853620" level="INFO">${value} = false</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-18T03:23:53.853261" elapsed="0.000386"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-18T03:23:53.854381" level="INFO">${encoded} = false</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-18T03:23:53.854167" elapsed="0.000240"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-18T03:23:53.854471" elapsed="0.000033"/>
</return>
<msg time="2026-04-18T03:23:53.854648" level="INFO">${encoded_value} = false</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-04-18T03:23:53.853842" 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-04-18T03:23:53.854826" elapsed="0.000223"/>
</kw>
<var name="${key}">PASSIVE_MODE</var>
<var name="${value}">false</var>
<status status="PASS" start="2026-04-18T03:23:53.853125" elapsed="0.001965"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-18T03:23:53.855675" level="INFO">${value} = example-bgp-rib</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-18T03:23:53.855338" elapsed="0.000363"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-18T03:23:53.856474" level="INFO">${encoded} = example-bgp-rib</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-18T03:23:53.856248" elapsed="0.000253"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-18T03:23:53.856578" elapsed="0.000031"/>
</return>
<msg time="2026-04-18T03:23:53.856737" level="INFO">${encoded_value} = example-bgp-rib</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-04-18T03:23:53.855898" 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-04-18T03:23:53.856925" elapsed="0.000225"/>
</kw>
<var name="${key}">BGP_RIB_OPENCONFIG</var>
<var name="${value}">example-bgp-rib</var>
<status status="PASS" start="2026-04-18T03:23:53.855202" elapsed="0.001990"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-18T03:23:53.857788" level="INFO">${value} = example-bgp-rib</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-18T03:23:53.857446" elapsed="0.000368"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-18T03:23:53.858568" level="INFO">${encoded} = example-bgp-rib</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-18T03:23:53.858324" elapsed="0.000271"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-18T03:23:53.858695" elapsed="0.000031"/>
</return>
<msg time="2026-04-18T03:23:53.858850" level="INFO">${encoded_value} = example-bgp-rib</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-04-18T03:23:53.858006" elapsed="0.000870"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-18T03:23:53.859029" elapsed="0.000226"/>
</kw>
<var name="${key}">RIB_INSTANCE_NAME</var>
<var name="${value}">example-bgp-rib</var>
<status status="PASS" start="2026-04-18T03:23:53.857304" elapsed="0.001994"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-18T03:23:53.838306" elapsed="0.021029"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-18T03:23:53.859384" elapsed="0.000035"/>
</return>
<msg time="2026-04-18T03:23:53.859600" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'controller-config', 'BGP_NAME': 'example-bgp-peer', 'IP': '10.30.170.251', 'HOLDTIME': '180', 'PEER_PORT': '17900', 'INITIATE': 'true', 'BGP_RIB': 'example-bgp-rib', 'PASSIVE_MODE': '...</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-18T03:23:53.837142" elapsed="0.022486"/>
</kw>
<status status="PASS" start="2026-04-18T03:23:53.836803" elapsed="0.022861"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.859856" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:23:53.859695" elapsed="0.000218"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:53.836778" elapsed="0.023157"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:23:53.860919" level="INFO">${final_text} = rests/data/openconfig-network-instance:network-instances/network-instance=global-bgp/openconfig-network-instance:protocols/protocol=openconfig-policy-types%3ABGP,example-bgp-rib/bgp-openconfig-extensi...</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:23:53.860086" elapsed="0.000864"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-18T03:23:53.861000" 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/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer/${file_name}.</doc>
<status status="PASS" start="2026-04-18T03:23:53.832902" elapsed="0.028230"/>
</kw>
<msg time="2026-04-18T03:23:53.861190" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:23:53.816779" elapsed="0.044464"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.874177" 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/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.886901" 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/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.899495" elapsed="0.000030"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.899745" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.899934" elapsed="0.000020"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.900356" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:23:53.900202" elapsed="0.000211"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:23:53.900185" elapsed="0.000254"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.900599" elapsed="0.000081"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.900835" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.901007" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-18T03:23:53.900129" elapsed="0.000931"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-18T03:23:53.900015" elapsed="0.001074"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.901237" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-18T03:23:53.901314" elapsed="0.000017"/>
</return>
<msg time="2026-04-18T03:23:53.901460" level="INFO">${uri} = rests/data/openconfig-network-instance:network-instances/network-instance=global-bgp/openconfig-network-instance:protocols/protocol=openconfig-policy-types%3ABGP,example-bgp-rib/bgp-openconfig-extensi...</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from 1, by one  times.
Template variable ${j} is calculated as ${i} incremented by offset 0 ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-04-18T03:23:53.812564" elapsed="0.088925"/>
</kw>
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:23:53.928246" level="INFO">${file_path_stream} = /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.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-04-18T03:23:53.927822" elapsed="0.000455"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-18T03:23:53.929054" level="FAIL">File '/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/variables/bgpuser/bgp_peer.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-04-18T03:23:53.928804" elapsed="0.000323">File '/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/variables/bgpuser/bgp_peer.vanadium/data.xml' does not exist.</status>
</kw>
<msg time="2026-04-18T03:23:53.929220" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-18T03:23:53.928445" elapsed="0.000799"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-18T03:23:53.929815" level="INFO">${file_path} = /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer/data.xml</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-18T03:23:53.929409" elapsed="0.000433"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-18T03:23:53.930266" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/variables/bgpuser/bgp_peer/data.xml"&gt;/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/variables/bgpuser/bgp_peer/data.xml&lt;/a&gt;'.</msg>
<msg time="2026-04-18T03:23:53.930430" level="INFO">${template} = &lt;neighbor xmlns="urn:opendaylight:params:xml:ns:yang:bgp:openconfig-extensions"&gt;
    &lt;neighbor-address&gt;$IP&lt;/neighbor-address&gt;
    &lt;route-reflector&gt;
        &lt;config&gt;
            &lt;route-reflector-client...</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-18T03:23:53.930028" elapsed="0.000431"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:23:53.930892" level="INFO">&lt;neighbor xmlns="urn:opendaylight:params:xml:ns:yang:bgp:openconfig-extensions"&gt;
    &lt;neighbor-address&gt;$IP&lt;/neighbor-address&gt;
    &lt;route-reflector&gt;
        &lt;config&gt;
            &lt;route-reflector-client&gt;false&lt;/route-reflector-client&gt;
        &lt;/config&gt;
    &lt;/route-reflector&gt;
    &lt;timers&gt;
        &lt;config&gt;
            &lt;hold-time&gt;$HOLDTIME&lt;/hold-time&gt;
            &lt;connect-retry&gt;5&lt;/connect-retry&gt;
        &lt;/config&gt;
    &lt;/timers&gt;
    &lt;transport&gt;
        &lt;config&gt;
            &lt;remote-port&gt;$PEER_PORT&lt;/remote-port&gt;
            &lt;passive-mode&gt;$PASSIVE_MODE&lt;/passive-mode&gt;
        &lt;/config&gt;
    &lt;/transport&gt;
    &lt;config&gt;
        &lt;peer-type&gt;INTERNAL&lt;/peer-type&gt;
    &lt;/config&gt;
    &lt;afi-safis&gt;
        &lt;afi-safi&gt;
            &lt;afi-safi-name xmlns:x="http://openconfig.net/yang/bgp-types"&gt;x:IPV4-UNICAST&lt;/afi-safi-name&gt;
        &lt;/afi-safi&gt;
        &lt;afi-safi&gt;
            &lt;afi-safi-name xmlns:x="http://openconfig.net/yang/bgp-types"&gt;x:IPV6-UNICAST&lt;/afi-safi-name&gt;
        &lt;/afi-safi&gt;
        &lt;afi-safi&gt;
            &lt;afi-safi-name&gt;LINKSTATE&lt;/afi-safi-name&gt;
        &lt;/afi-safi&gt;
    &lt;/afi-safis&gt;
&lt;/neighbor&gt;
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:23:53.930639" elapsed="0.000324"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="NOT RUN" start="2026-04-18T03:23:53.931363" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:23:53.931038" elapsed="0.000383"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:23:53.931928" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'controller-config', 'BGP_NAME': 'example-bgp-peer', 'IP': '10.30.170.251', 'HOLDTIME': '180', 'PEER_PORT': '17900', 'INITIATE': 'true', 'BGP_RIB': 'example-bgp-rib', 'PASSIVE_MODE': '...</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:23:53.931615" elapsed="0.000347"/>
</kw>
<status status="PASS" start="2026-04-18T03:23:53.931448" elapsed="0.000601"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:53.931017" elapsed="0.001056"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:23:53.933144" level="INFO">${final_text} = &lt;neighbor xmlns="urn:opendaylight:params:xml:ns:yang:bgp:openconfig-extensions"&gt;
    &lt;neighbor-address&gt;10.30.170.251&lt;/neighbor-address&gt;
    &lt;route-reflector&gt;
        &lt;config&gt;
            &lt;route-reflec...</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:23:53.932288" elapsed="0.000889"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-18T03:23:53.933229" 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/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer/${file_name}.</doc>
<status status="PASS" start="2026-04-18T03:23:53.927179" elapsed="0.006186"/>
</kw>
<msg time="2026-04-18T03:23:53.933425" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:23:53.914521" elapsed="0.018953"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.946186" 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/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.958668" 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/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.971017" elapsed="0.000032"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.971252" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.971437" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.971877" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:23:53.971721" elapsed="0.000214"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:23:53.971703" elapsed="0.000259"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.972125" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.972294" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.972459" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-18T03:23:53.971664" elapsed="0.000846"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-18T03:23:53.971519" elapsed="0.001038"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.972732" elapsed="0.000024"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-18T03:23:53.972819" elapsed="0.000018"/>
</return>
<msg time="2026-04-18T03:23:53.972990" level="INFO">${data} = &lt;neighbor xmlns="urn:opendaylight:params:xml:ns:yang:bgp:openconfig-extensions"&gt;
    &lt;neighbor-address&gt;10.30.170.251&lt;/neighbor-address&gt;
    &lt;route-reflector&gt;
        &lt;config&gt;
            &lt;route-reflec...</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-04-18T03:23:53.911869" elapsed="0.061154"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-18T03:23:53.974566" level="FAIL">File '/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/variables/bgpuser/bgp_peer/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-18T03:23:53.974266" elapsed="0.000392">File '/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/variables/bgpuser/bgp_peer/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-18T03:23:53.974754" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-18T03:23:53.973854" elapsed="0.000925"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:53.975120" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:23:53.974849" elapsed="0.000327"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:23:53.975710" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:23:53.975379" elapsed="0.000360"/>
</kw>
<status status="PASS" start="2026-04-18T03:23:53.975201" elapsed="0.000574"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:53.974831" elapsed="0.000967"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-18T03:23:53.978176" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-18T03:23:53.975955" elapsed="0.002248"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-18T03:23:53.978255" elapsed="0.000032"/>
</return>
<msg time="2026-04-18T03:23:53.978414" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-18T03:23:53.973449" elapsed="0.004990"/>
</kw>
<kw name="Put_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:23:53.979888" level="INFO">rests/data/openconfig-network-instance:network-instances/network-instance=global-bgp/openconfig-network-instance:protocols/protocol=openconfig-policy-types%3ABGP,example-bgp-rib/bgp-openconfig-extensions:bgp/neighbors/neighbor=10.30.170.251</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:23:53.979618" elapsed="0.000320"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:23:53.980363" level="INFO">&lt;neighbor xmlns="urn:opendaylight:params:xml:ns:yang:bgp:openconfig-extensions"&gt;
    &lt;neighbor-address&gt;10.30.170.251&lt;/neighbor-address&gt;
    &lt;route-reflector&gt;
        &lt;config&gt;
            &lt;route-reflector-client&gt;false&lt;/route-reflector-client&gt;
        &lt;/config&gt;
    &lt;/route-reflector&gt;
    &lt;timers&gt;
        &lt;config&gt;
            &lt;hold-time&gt;180&lt;/hold-time&gt;
            &lt;connect-retry&gt;5&lt;/connect-retry&gt;
        &lt;/config&gt;
    &lt;/timers&gt;
    &lt;transport&gt;
        &lt;config&gt;
            &lt;remote-port&gt;17900&lt;/remote-port&gt;
            &lt;passive-mode&gt;false&lt;/passive-mode&gt;
        &lt;/config&gt;
    &lt;/transport&gt;
    &lt;config&gt;
        &lt;peer-type&gt;INTERNAL&lt;/peer-type&gt;
    &lt;/config&gt;
    &lt;afi-safis&gt;
        &lt;afi-safi&gt;
            &lt;afi-safi-name xmlns:x="http://openconfig.net/yang/bgp-types"&gt;x:IPV4-UNICAST&lt;/afi-safi-name&gt;
        &lt;/afi-safi&gt;
        &lt;afi-safi&gt;
            &lt;afi-safi-name xmlns:x="http://openconfig.net/yang/bgp-types"&gt;x:IPV6-UNICAST&lt;/afi-safi-name&gt;
        &lt;/afi-safi&gt;
        &lt;afi-safi&gt;
            &lt;afi-safi-name&gt;LINKSTATE&lt;/afi-safi-name&gt;
        &lt;/afi-safi&gt;
    &lt;/afi-safis&gt;
&lt;/neighbor&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:23:53.980120" elapsed="0.000302"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:23:53.980854" level="INFO">{'Content-Type': 'application/xml'}</msg>
<arg>${content_type}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:23:53.980591" elapsed="0.000307"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:23:53.981290" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:23:53.981050" elapsed="0.000283"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-18T03:23:53.982168" level="INFO">${accumulator} = {'Content-Type': 'application/xml'}</msg>
<var>${accumulator}</var>
<arg>${first}</arg>
<doc>Returns a copy of the given dictionary.</doc>
<status status="PASS" start="2026-04-18T03:23:53.981969" elapsed="0.000225"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-18T03:23:53.982525" level="INFO">${items_to_add} = ['Accept', 'application/xml']</msg>
<var>${items_to_add}</var>
<arg>${second}</arg>
<doc>Returns items of the given ``dictionary`` as a list.</doc>
<status status="PASS" start="2026-04-18T03:23:53.982349" elapsed="0.000227"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${accumulator}</arg>
<arg>@{items_to_add}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-18T03:23:53.982764" elapsed="0.000231"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:23:53.983422" level="INFO">{'Content-Type': 'application/xml', 'Accept': 'application/xml'}</msg>
<arg>${accumulator}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:23:53.983173" elapsed="0.000293"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-18T03:23:53.983509" elapsed="0.000048"/>
</return>
<msg time="2026-04-18T03:23:53.983687" level="INFO">${headers} = {'Content-Type': 'application/xml', 'Accept': 'application/xml'}</msg>
<var>${headers}</var>
<arg>first=${content_type}</arg>
<arg>second=${accept}</arg>
<doc>Take two dicts, join them, return result. Second argument values take precedence.</doc>
<status status="PASS" start="2026-04-18T03:23:53.981555" elapsed="0.002200"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="PUT On Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:23:54.012864" level="INFO">PUT Request : url=http://10.30.170.68:8181/rests/data/openconfig-network-instance:network-instances/network-instance=global-bgp/openconfig-network-instance:protocols/protocol=openconfig-policy-types%3ABGP,example-bgp-rib/bgp-openconfig-extensions:bgp/neighbors/neighbor=10.30.170.251 
 path_url=/rests/data/openconfig-network-instance:network-instances/network-instance=global-bgp/openconfig-network-instance:protocols/protocol=openconfig-policy-types%3ABGP,example-bgp-rib/bgp-openconfig-extensions:bgp/neighbors/neighbor=10.30.170.251 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node01nuoo0mlt5ido1wctlq8u208h83.node0', 'Content-Length': '1080', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;neighbor xmlns="urn:opendaylight:params:xml:ns:yang:bgp:openconfig-extensions"&gt;
    &lt;neighbor-address&gt;10.30.170.251&lt;/neighbor-address&gt;
    &lt;route-reflector&gt;
        &lt;config&gt;
            &lt;route-reflector-client&gt;false&lt;/route-reflector-client&gt;
        &lt;/config&gt;
    &lt;/route-reflector&gt;
    &lt;timers&gt;
        &lt;config&gt;
            &lt;hold-time&gt;180&lt;/hold-time&gt;
            &lt;connect-retry&gt;5&lt;/connect-retry&gt;
        &lt;/config&gt;
    &lt;/timers&gt;
    &lt;transport&gt;
        &lt;config&gt;
            &lt;remote-port&gt;17900&lt;/remote-port&gt;
            &lt;passive-mode&gt;false&lt;/passive-mode&gt;
        &lt;/config&gt;
    &lt;/transport&gt;
    &lt;config&gt;
        &lt;peer-type&gt;INTERNAL&lt;/peer-type&gt;
    &lt;/config&gt;
    &lt;afi-safis&gt;
        &lt;afi-safi&gt;
            &lt;afi-safi-name xmlns:x="http://openconfig.net/yang/bgp-types"&gt;x:IPV4-UNICAST&lt;/afi-safi-name&gt;
        &lt;/afi-safi&gt;
        &lt;afi-safi&gt;
            &lt;afi-safi-name xmlns:x="http://openconfig.net/yang/bgp-types"&gt;x:IPV6-UNICAST&lt;/afi-safi-name&gt;
        &lt;/afi-safi&gt;
        &lt;afi-safi&gt;
            &lt;afi-safi-name&gt;LINKSTATE&lt;/afi-safi-name&gt;
        &lt;/afi-safi&gt;
    &lt;/afi-safis&gt;
&lt;/neighbor&gt; 
 </msg>
<msg time="2026-04-18T03:23:54.012954" level="INFO">PUT Response : url=http://10.30.170.68:8181/rests/data/openconfig-network-instance:network-instances/network-instance=global-bgp/openconfig-network-instance:protocols/protocol=openconfig-policy-types%3ABGP,example-bgp-rib/bgp-openconfig-extensions:bgp/neighbors/neighbor=10.30.170.251 
 status=204, reason=No Content 
 headers={} 
 body=None 
 </msg>
<msg time="2026-04-18T03:23:54.013102" level="INFO">${response} = &lt;Response [204]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<doc>Sends a PUT request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-18T03:23:53.986102" elapsed="0.027030"/>
</kw>
<status status="PASS" start="2026-04-18T03:23:53.983839" elapsed="0.029349"/>
</branch>
<branch type="ELSE">
<kw name="PUT On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a PUT request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:54.013421" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:23:54.013221" elapsed="0.000270"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:53.983819" elapsed="0.029695"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:23:54.017128" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:23:54.014606" elapsed="0.002591"/>
</kw>
<status status="PASS" start="2026-04-18T03:23:54.014350" elapsed="0.002885"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:54.014328" elapsed="0.002932"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:23:54.019937" level="INFO">204</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:23:54.017587" elapsed="0.002401"/>
</kw>
<status status="PASS" start="2026-04-18T03:23:54.017317" elapsed="0.002734"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:54.017300" elapsed="0.002788"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:23:54.020727" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:23:54.020292" elapsed="0.000463"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:54.021066" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:23:54.020826" elapsed="0.000297"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:23:54.021670" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:23:54.021341" elapsed="0.000356"/>
</kw>
<status status="PASS" start="2026-04-18T03:23:54.021146" elapsed="0.000588"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:54.020807" elapsed="0.000949"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:23:54.022464" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:23:54.021917" elapsed="0.000579"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:54.022824" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:23:54.022586" elapsed="0.000300"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:23:54.023416" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:23:54.023076" elapsed="0.000387"/>
</kw>
<status status="PASS" start="2026-04-18T03:23:54.022916" elapsed="0.000586"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:54.022566" elapsed="0.000957"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:23:54.023700" elapsed="0.000398"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-18T03:23:54.024713" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:23:54.024329" elapsed="0.000412"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-18T03:23:54.024904" elapsed="0.002336"/>
</kw>
<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="PASS" start="2026-04-18T03:23:54.013947" elapsed="0.013372"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-18T03:23:54.027551" elapsed="0.000043"/>
</return>
<status status="PASS" start="2026-04-18T03:23:54.027402" elapsed="0.000231"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:54.027378" elapsed="0.000280"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:54.027824" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-18T03:23:54.027894" elapsed="0.000015"/>
</return>
<msg time="2026-04-18T03:23:54.030156" level="INFO">${response_text} = </msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>content_type=${content_type}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>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="PASS" start="2026-04-18T03:23:53.978809" elapsed="0.051376"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-18T03:23:54.030252" elapsed="0.000028"/>
</return>
<msg time="2026-04-18T03:23:54.030410" level="INFO">${response_text} = </msg>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>extension=xml</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>content_type=${HEADERS_XML}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>endline=${\n}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>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="PASS" start="2026-04-18T03:23:53.801272" elapsed="0.229163"/>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=response</arg>
<arg>mapping=${mapping}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:54.030854" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:23:54.030565" elapsed="0.000360"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:54.030545" elapsed="0.000404"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-18T03:23:54.030982" elapsed="0.000026"/>
</return>
<arg>${BGP_VARIABLES_FOLDER}${/}bgp_peer</arg>
<arg>mapping=${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="PASS" start="2026-04-18T03:23:53.796496" elapsed="0.234613"/>
</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">
<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-04-18T03:23:54.031766" elapsed="0.000307"/>
</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-04-18T03:23:54.032948" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:23:54.032545" elapsed="0.000466"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:54.032507" elapsed="0.000529"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>'${SetupUtils__Known_Bug_ID}' != ''</arg>
<arg>Set_Known_Bug_Id</arg>
<arg>${EMPTY}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:23:54.033184" elapsed="0.000311"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:23:54.039074" level="INFO">${test_skipped} = False</msg>
<var>${test_skipped}</var>
<arg>len(re.findall('SKIPPED', """${TEST_MESSAGE}""")) &gt; 0</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:23:54.038561" elapsed="0.000543"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-04-18T03:23:54.039335" elapsed="0.000029"/>
</return>
<status status="PASS" start="2026-04-18T03:23:54.039187" elapsed="0.000208"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:54.039168" 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-04-18T03:23:54.039587" elapsed="0.000023"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<var>${reference}</var>
<arg>${SUITE_NAME}_${TEST_NAME}</arg>
<arg>[ /\.-]</arg>
<arg>_</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:54.039786" elapsed="0.000024"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:54.040010" elapsed="0.000027"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${msg}</var>
<arg>... click for list of related bugs or create a new one if needed (with the${newline}"${reference}"${newline}reference somewhere inside)</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:54.040194" elapsed="0.000020"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${bugs}</var>
<arg>"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=${reference}&amp;order=bug_status"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:54.040442" 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-04-18T03:23:54.040633" elapsed="0.000022"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:54.040831" elapsed="0.000022"/>
</kw>
<doc>Report that a test failed and point to linked Bugzilla bug(s).
Linked bugs must contain the ${reference} inside comments (workaround
becasue of currently missing suitable field for external references and
not correctly working the CONTENT MATCHES filter).
Not FAILED (incl. SKIPPED) test are not reported.
This keyword must be used in the [Teardown] setting of the affected test
or as the first line of the test if FastFail module is not being
used. It reports the URL of the bug on console and also puts it
into the Robot log file.</doc>
<status status="PASS" start="2026-04-18T03:23:54.038202" elapsed="0.002708"/>
</kw>
<status status="PASS" start="2026-04-18T03:23:54.032310" elapsed="0.008679"/>
</kw>
<doc>Test case teardown. Show linked bugs and start fast failing in case of failure.</doc>
<status status="PASS" start="2026-04-18T03:23:54.031404" elapsed="0.009639"/>
</kw>
<doc>Replace BGP peer config module, now with initiate-connection set to true.</doc>
<status status="PASS" start="2026-04-18T03:23:53.709439" elapsed="0.331652"/>
</test>
<test id="s1-s2-t12" name="Wait_For_Stable_Listening_Ipv4_Topology" line="175">
<kw name="Setup_Test_With_Logging_And_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Fail_This_Fast_On_Previous_Error" owner="FailFast">
<if>
<branch type="IF" condition="'''${SuiteFastFail}'''=='True'">
<kw name="Fail" owner="BuiltIn">
<arg>SKIPPED due to a failure in a previous fundamental test case.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:54.044718" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:23:54.044476" elapsed="0.000308"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:54.044458" elapsed="0.000353"/>
</if>
<doc>Mark (immediately) this test case as failed when fast-fail is enabled in suite.</doc>
<status status="PASS" start="2026-04-18T03:23:54.044288" elapsed="0.000571"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:23:54.045951" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:23:54.045836" elapsed="0.000162"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:54.045816" 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-04-18T03:23:54.051086" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:23:54.050969" elapsed="0.000164"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:54.050948" elapsed="0.000207"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-18T03:23:54.052213" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-18T03:23:54.051805" elapsed="0.000436"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-18T03:23:54.052720" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-18T03:23:54.052403" elapsed="0.000343"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-18T03:23:54.052791" elapsed="0.000029"/>
</return>
<msg time="2026-04-18T03:23:54.052952" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-18T03:23:54.051394" elapsed="0.001585"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:23:54.060040" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:23:54.059890" elapsed="0.000197"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:54.059870" 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-04-18T03:23:54.061326" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:23:54.061218" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:54.061199" elapsed="0.000195"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-18T03:23:54.062018" level="INFO">${karaf_connection_index} = 4</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-18T03:23:54.061568" elapsed="0.000479"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-18T03:23:54.062437" level="INFO">${current_connection_index} = 7</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:23:54.062211" elapsed="0.000252"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-18T03:23:54.089748" 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 "b "g "p "c "e "p "- "b "g "p "- "i "n "g "e "s "t "[78C- "[A[78Cm</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-18T03:23:54.062988" elapsed="0.026871"/>
</kw>
<msg time="2026-04-18T03:23:54.090031" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-18T03:23:54.090077" 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 "b "g "p "c "e "p "- "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:23:54.062646" elapsed="0.027468"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-18T03:23:54.128204" level="INFO">"i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "W "a "i "t "_ "F "o "r "_ "S "t "a "b "l "e "_ "L "i "s "t "e "n "i "n "g "_ "I "p "v "4 "_ "T "o "p "o "l "o "g "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-04-18T03:23:54.090679" elapsed="0.037808"/>
</kw>
<msg time="2026-04-18T03:23:54.128915" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-18T03:23:54.129018" level="INFO">${message_wait} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "W "a "i "t "_ "F "o "...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:23:54.090291" elapsed="0.038808"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:54.129893" elapsed="0.000058"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:23:54.129289" elapsed="0.000744"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:54.129235" elapsed="0.000858"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:23:54.131342" level="INFO"> "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "W "a "i "t "_ "F "o "r "_ "S "t "a "b "l "e "_ "L "i "s "t "e "n "i "n "g "_ "I "p "v "4 "_ "T "o "p "o "l "o "g "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-04-18T03:23:54.130458" elapsed="0.001140"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:54.132390" elapsed="0.000061"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:23:54.131774" elapsed="0.000805"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:54.131727" elapsed="0.000914"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-18T03:23:54.132729" elapsed="0.000078"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:23:54.135635" elapsed="0.000151"/>
</kw>
<msg time="2026-04-18T03:23:54.135851" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:23:54.134437" elapsed="0.001638"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:54.136361" elapsed="0.000079"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:54.136727" elapsed="0.000078"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-18T03:23:54.133768" elapsed="0.003151"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-18T03:23:54.133134" elapsed="0.003853"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-18T03:23:54.060910" elapsed="0.076176"/>
</kw>
<msg time="2026-04-18T03:23:54.137184" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:23:54.137229" level="INFO">${message} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "W "a "i "t "_ "F "o "...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:23:54.060270" elapsed="0.076997"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:23:54.137454" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-18T03:23:54.137345" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:54.137326" elapsed="0.000255"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:54.138088" elapsed="0.000035"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:54.138505" elapsed="0.000047"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:23:54.138603" elapsed="0.000016"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-18T03:23:54.059524" elapsed="0.079191"/>
</kw>
<msg time="2026-04-18T03:23:54.138811" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:23:54.138855" level="INFO">${output} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "W "a "i "t "_ "F "o "...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:23:54.053377" elapsed="0.085516"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:54.139225" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:23:54.138970" elapsed="0.000307"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:54.138952" elapsed="0.000349"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-18T03:23:54.053226" elapsed="0.086145"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-18T03:23:54.053034" elapsed="0.086374"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-18T03:23:54.050601" elapsed="0.088864"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-18T03:23:54.045503" elapsed="0.094020"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:23:54.045034" elapsed="0.094556"/>
</kw>
<doc>Test case setup which skips on previous failure. If not, logs test case name to Karaf log.
Recommended to be used as the default test case setup.</doc>
<status status="PASS" start="2026-04-18T03:23:54.042040" elapsed="0.097604"/>
</kw>
<kw name="Wait_For_Ipv4_Topology_Prefixes_To_Become_Stable" owner="PrefixCounting">
<if>
<branch type="IF" condition="&quot;&quot;&quot;${shards_list}&quot;&quot;&quot;==&quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="Closure_From_Keyword_And_Arguments" owner="ScalarClosures">
<return>
<value>${keyword}</value>
<value>${args}</value>
<value>${kwargs}</value>
<status status="PASS" start="2026-04-18T03:23:54.158767" elapsed="0.000031"/>
</return>
<msg time="2026-04-18T03:23:54.158985" level="INFO">${getter} = ['Get_Ipv4_Topology_Count', [], {'session': 'operational', 'topology': 'example-ipv4-topology'}]</msg>
<var>${getter}</var>
<arg>Get_Ipv4_Topology_Count</arg>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>Turn keyword with given arguments into a scalar closure.</doc>
<status status="PASS" start="2026-04-18T03:23:54.158349" elapsed="0.000664"/>
</kw>
<status status="PASS" start="2026-04-18T03:23:54.156234" elapsed="0.002820"/>
</branch>
<branch type="ELSE">
<kw name="Closure_From_Keyword_And_Arguments" owner="ScalarClosures">
<var>${getter}</var>
<arg>Get_Ipv4_Topology_Count_With_Shards_Check</arg>
<arg>${shards_list}</arg>
<arg>${shards_details}</arg>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>Turn keyword with given arguments into a scalar closure.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:54.159280" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:23:54.159078" elapsed="0.000272"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:54.156216" elapsed="0.003156"/>
</if>
<kw name="Closure_From_Keyword_And_Arguments" owner="ScalarClosures">
<return>
<value>${keyword}</value>
<value>${args}</value>
<value>${kwargs}</value>
<status status="PASS" start="2026-04-18T03:23:54.159932" elapsed="0.000028"/>
</return>
<msg time="2026-04-18T03:23:54.160141" level="INFO">${validator} = ['WaitUtils.Excluding_Stability_Safe_Stateful_Validator_As_Keyword', ['state_holder', 'data_holder'], {'excluded_value': '0'}]</msg>
<var>${validator}</var>
<arg>WaitUtils.Excluding_Stability_Safe_Stateful_Validator_As_Keyword</arg>
<arg>state_holder</arg>
<arg>data_holder</arg>
<arg>excluded_value=${excluded_count}</arg>
<doc>Turn keyword with given arguments into a scalar closure.</doc>
<status status="PASS" start="2026-04-18T03:23:54.159606" elapsed="0.000563"/>
</kw>
<kw name="Wait_For_Getter_Error_Or_Safe_Stateful_Validator_Consecutive_Success" owner="WaitUtils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:23:54.161651" level="INFO">${tmp} = 1</msg>
<var>${tmp}</var>
<arg>int(${count})</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:23:54.161230" elapsed="0.000450"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:23:54.162141" level="INFO">count=1</msg>
<arg>count=${tmp}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:23:54.161840" elapsed="0.000375"/>
</kw>
<kw name="WaitUtils__Check_Sanity_And_Compute_Derived_Times" owner="WaitUtils">
<if>
<branch type="IF" condition="int(${count}) &lt; 1">
<kw name="Fail" owner="BuiltIn">
<arg>\${count} is ${count} and not at least 1.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:54.163415" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:23:54.163127" elapsed="0.000360"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:54.163104" elapsed="0.000417"/>
</if>
<kw name="Convert Time" owner="DateTime">
<msg time="2026-04-18T03:23:54.164101" level="INFO">${period_in_seconds} = 60.0</msg>
<var>${period_in_seconds}</var>
<arg>${period}</arg>
<arg>result_format=number</arg>
<doc>Converts between supported `time formats`.</doc>
<status status="PASS" start="2026-04-18T03:23:54.163748" elapsed="0.000382"/>
</kw>
<if>
<branch type="IF" condition="${period_in_seconds} &lt;= 0.0">
<kw name="Fail" owner="BuiltIn">
<arg>\${period} ${period} has to be positive.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:54.164429" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:23:54.164201" elapsed="0.000283"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:54.164183" elapsed="0.000324"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:23:54.164837" level="INFO">${date_now} = 2026-04-18 03:23:54.165</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:23:54.164667" elapsed="0.000197"/>
</kw>
<kw name="Convert Time" owner="DateTime">
<msg time="2026-04-18T03:23:54.165250" level="INFO">${timeout_in_seconds} = 980.0</msg>
<var>${timeout_in_seconds}</var>
<arg>${timeout}</arg>
<arg>result_format=number</arg>
<doc>Converts between supported `time formats`.</doc>
<status status="PASS" start="2026-04-18T03:23:54.165014" elapsed="0.000262"/>
</kw>
<kw name="Add Time To Date" owner="DateTime">
<msg time="2026-04-18T03:23:54.165758" level="INFO">${date_deadline} = 2026-04-18 03:40:14.165</msg>
<var>${date_deadline}</var>
<arg>${date_now}</arg>
<arg>${timeout_in_seconds}</arg>
<doc>Adds time to date and returns the resulting date.</doc>
<status status="PASS" start="2026-04-18T03:23:54.165432" elapsed="0.000352"/>
</kw>
<return>
<value>${timeout_in_seconds}</value>
<value>${period_in_seconds}</value>
<value>${date_deadline}</value>
<status status="PASS" start="2026-04-18T03:23:54.165831" elapsed="0.000029"/>
</return>
<msg time="2026-04-18T03:23:54.166071" level="INFO">${timeout_in_seconds} = 980.0</msg>
<msg time="2026-04-18T03:23:54.166117" level="INFO">${period_in_seconds} = 60.0</msg>
<msg time="2026-04-18T03:23:54.166158" level="INFO">${date_deadline} = 2026-04-18 03:40:14.165</msg>
<var>${timeout_in_seconds}</var>
<var>${period_in_seconds}</var>
<var>${date_deadline}</var>
<arg>timeout=${timeout}</arg>
<arg>period=${period}</arg>
<arg>count=${count}</arg>
<doc>Common checks for argument values. Return times in seconds and deadline date implied by timeout time.</doc>
<status status="PASS" start="2026-04-18T03:23:54.162618" elapsed="0.003563"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:23:54.166794" level="INFO">${maximum_sleeps} = 17</msg>
<var>${maximum_sleeps}</var>
<arg>math.ceil(${timeout_in_seconds} / ${period_in_seconds})</arg>
<arg>modules=math</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:23:54.166349" elapsed="0.000472"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:23:54.167295" level="INFO">${result} = No result yet.</msg>
<var>${result}</var>
<arg>No result yet.</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:23:54.166983" elapsed="0.000338"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:23:54.167783" level="INFO">${state} = 0</msg>
<var>${state}</var>
<arg>${initial_state}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:23:54.167476" elapsed="0.000332"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="Getter_And_Safe_Stateful_Validator_Have_To_Succeed_Consecutively_By_Deadline" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:23:54.169677" level="INFO">${result} = No result yet.</msg>
<var>${result}</var>
<arg>No result yet.</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:23:54.169400" elapsed="0.000303"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:23:54.170311" level="INFO">${state} = 0</msg>
<var>${state}</var>
<arg>${initial_state}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:23:54.169859" elapsed="0.000478"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:23:54.170836" level="INFO">${sleeps} = 0</msg>
<var>${sleeps}</var>
<arg>${count} - 1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:23:54.170496" elapsed="0.000366"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:23:54.172222" level="INFO">${date_now} = 2026-04-18 03:23:54.172</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:23:54.172073" elapsed="0.000176"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:23:54.172762" level="INFO">${time_deadline} = 979.993</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:23:54.172401" elapsed="0.000388"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:23:54.173323" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:23:54.172950" elapsed="0.000400"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:54.173681" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:23:54.173418" elapsed="0.000317"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:54.173400" elapsed="0.000359"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:23:54.171466" elapsed="0.002340"/>
</kw>
<msg time="2026-04-18T03:23:54.173906" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:23:54.173951" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:23:54.171028" elapsed="0.002946"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:23:54.174156" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:23:54.174052" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:54.174035" elapsed="0.000191"/>
</if>
<for flavor="IN RANGE">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_As_Is" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:23:54.176905" level="INFO">${keyword} = Get_Ipv4_Topology_Count</msg>
<msg time="2026-04-18T03:23:54.176951" level="INFO">${args} = []</msg>
<msg time="2026-04-18T03:23:54.176996" level="INFO">${kwargs} = {'session': 'operational', 'topology': 'example-ipv4-topology'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:23:54.176559" elapsed="0.000460"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Get_Ipv4_Topology_Count" owner="PrefixCounting">
<kw name="Get_Ipv4_Topology" owner="PrefixCounting">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:23:54.186496" level="INFO">GET Request : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01agv6blx930rdupfsp7wkuo902.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-18T03:23:54.188322" level="INFO">GET Response : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '4809'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xmlns="urn:opendaylight:params:xml:ns:yang:odl-bgp-topology-types"/&gt;&lt;/topology-types&gt;&lt;node&gt;&lt;node-id&gt;192.0.2.1&lt;/node-id&gt;&lt;igp-node-attributes xmlns="urn:TBD:params:xml:ns:yang:nt:l3-unicast-igp-topology"&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.30.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.36.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.6.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.53.192/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.7.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.50.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.16.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.53.224/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.9.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.39.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.39.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.53.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.11.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.19.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.49.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.29.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.1.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.34.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.53.128/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.53.160/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.24.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.52.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.32.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.27.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.2.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.8.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.19.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.38.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.47.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.37.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.18.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.43.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.5.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.4.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.20.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.17.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.35.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.15.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.35.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.41.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.42.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.23.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.22.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.12.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.15.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.46.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.20.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.54.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.50.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.40.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.40.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.2.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.26.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.45.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.21.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.14.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.24.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.49.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.44.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.44.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.34.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.29.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.17.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.42.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.14.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.5.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.54.0/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.9.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.53.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.37.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.53.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.53.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.48.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.10.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.45.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.12.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.31.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.25.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.30.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.7.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.47.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.27.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.3.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.33.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.25.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.52.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.13.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.32.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.22.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.28.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.10.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.51.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.0.53.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;/igp-node-attributes&gt;&lt;/node&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-04-18T03:23:54.188592" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${PC_NW_TOPOLOGY}=${topology}?content=nonconfig</arg>
<arg>expected_status=anything</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-18T03:23:54.179917" elapsed="0.008728"/>
</kw>
<if>
<branch type="IF" condition="${response.status_code} != 200">
<kw name="Fail" owner="BuiltIn">
<arg>Get on ${topology} returned status code ${response.status_code} with message: ${response.text}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:54.191340" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:23:54.188815" elapsed="0.002601"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:54.188759" elapsed="0.002701"/>
</if>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-18T03:23:54.191571" elapsed="0.000068"/>
</return>
<msg time="2026-04-18T03:23:54.194188" level="INFO">${topology} = &lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xml...</msg>
<var>${topology}</var>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>GET the example-ipv4-topology data, check status is 200, return the topology data.</doc>
<status status="PASS" start="2026-04-18T03:23:54.178912" elapsed="0.015365"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:23:54.195766" level="INFO">${prefix_count} = 0</msg>
<var>${prefix_count}</var>
<arg>len(re.findall('"prefix":"', '''${topology}'''))</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:23:54.194558" elapsed="0.001299"/>
</kw>
<return>
<value>${prefix_count}</value>
<status status="PASS" start="2026-04-18T03:23:54.195974" elapsed="0.000031"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Get topology. If not fail, return number of prefixes in the topology.</doc>
<status status="PASS" start="2026-04-18T03:23:54.177699" elapsed="0.018549"/>
</kw>
<msg time="2026-04-18T03:23:54.196335" level="INFO">${result} = 0</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:23:54.177187" elapsed="0.019173"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:23:54.196408" elapsed="0.000027"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure without affecting arguments.</doc>
<status status="PASS" start="2026-04-18T03:23:54.176181" elapsed="0.020362"/>
</kw>
<msg time="2026-04-18T03:23:54.196640" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:23:54.196712" level="INFO">${message} = 0</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:23:54.175641" elapsed="0.021104"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:23:54.196921" elapsed="0.025769"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:23:54.223700" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-04-18T03:23:54.223563" elapsed="0.000206"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:54.223521" elapsed="0.000299"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:54.223990" elapsed="0.000023"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with 0.</doc>
<status status="PASS" start="2026-04-18T03:23:54.223131" elapsed="0.000946"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:23:54.224125" elapsed="0.000028"/>
</return>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:23:54.175220" elapsed="0.049028"/>
</kw>
<msg time="2026-04-18T03:23:54.224346" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:23:54.224391" level="INFO">${data} = 0</msg>
<var>${status}</var>
<var>${data}</var>
<arg>ScalarClosures.Run_Keyword_And_Collect_Garbage</arg>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:23:54.174798" elapsed="0.049616"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Getter failed: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:23:54.224613" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:23:54.224488" elapsed="0.000173"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:54.224471" elapsed="0.000211"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:23:54.226119" level="INFO">${date_now} = 2026-04-18 03:23:54.226</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:23:54.225941" elapsed="0.000208"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:23:54.226696" level="INFO">${time_deadline} = 979.939</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:23:54.226304" elapsed="0.000420"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:23:54.227290" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:23:54.226889" elapsed="0.000429"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:54.227657" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:23:54.227389" elapsed="0.000324"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:54.227370" elapsed="0.000366"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:23:54.225335" elapsed="0.002488"/>
</kw>
<msg time="2026-04-18T03:23:54.227925" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:23:54.227970" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:23:54.224841" elapsed="0.003153"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:23:54.228354" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:23:54.228243" elapsed="0.000162"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:54.228222" elapsed="0.000204"/>
</if>
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_After_Replacing_First_Two_Arguments" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:23:54.230440" level="INFO">${keyword} = WaitUtils.Excluding_Stability_Safe_Stateful_Validator_As_Keyword</msg>
<msg time="2026-04-18T03:23:54.230489" level="INFO">${args} = ['state_holder', 'data_holder']</msg>
<msg time="2026-04-18T03:23:54.230552" level="INFO">${kwargs} = {'excluded_value': '0'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:23:54.230116" elapsed="0.000461"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>0</arg>
<arg>${arg1}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:23:54.230741" elapsed="0.000209"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>1</arg>
<arg>${arg2}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:23:54.231110" elapsed="0.000493"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Excluding_Stability_Safe_Stateful_Validator_As_Keyword" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:23:54.233523" level="INFO">${new_state} = 0</msg>
<var>${new_state}</var>
<arg>${data}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:23:54.233100" elapsed="0.000469"/>
</kw>
<if>
<branch type="IF" condition="${data} == ${excluded_value}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Got the excluded value.</value>
<status status="PASS" start="2026-04-18T03:23:54.233816" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-18T03:23:54.233642" elapsed="0.000241"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:54.233622" elapsed="0.000285"/>
</if>
<if>
<branch type="IF" condition="${data} != ${old_state}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Data value has changed.</value>
<status status="NOT RUN" start="2026-04-18T03:23:54.233997" elapsed="0.000144"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:23:54.233962" elapsed="0.000217"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:23:54.233946" elapsed="0.000256"/>
</if>
<return>
<value>${new_state}</value>
<value>PASS</value>
<value>Validated stable: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:23:54.234234" elapsed="0.000019"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Report failure if got the excluded value or if data value changed from last time. Useful to become validator.</doc>
<status status="PASS" start="2026-04-18T03:23:54.232653" elapsed="0.001713"/>
</kw>
<msg time="2026-04-18T03:23:54.234451" level="INFO">${result} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:23:54.231913" elapsed="0.002563"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:23:54.234524" elapsed="0.000048"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure with replaced first two positional arguments.</doc>
<status status="PASS" start="2026-04-18T03:23:54.229719" elapsed="0.004949"/>
</kw>
<msg time="2026-04-18T03:23:54.234760" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:23:54.234804" level="INFO">${message} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:23:54.229147" elapsed="0.005680"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:23:54.234994" elapsed="0.025551"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:23:54.261601" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-04-18T03:23:54.261446" elapsed="0.000225"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:54.261421" elapsed="0.000276"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:54.261870" elapsed="0.000024"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with [0, 'FAIL', 'Got the excluded value.'].</doc>
<status status="PASS" start="2026-04-18T03:23:54.261024" elapsed="0.000932"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:23:54.262000" elapsed="0.000027"/>
</return>
<msg time="2026-04-18T03:23:54.262172" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:23:54.262218" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:23:54.262258" level="INFO">${result} = Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>ScalarClosures.Run_Closure_After_Replacing_First_Two_Arguments</arg>
<arg>${safe_validator}</arg>
<arg>${state}</arg>
<arg>${data}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:23:54.228680" elapsed="0.033601"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Validator failed: ${result}</value>
<status status="PASS" start="2026-04-18T03:23:54.262469" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-04-18T03:23:54.262361" elapsed="0.000188"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:54.262344" elapsed="0.000232"/>
</if>
<if>
<branch type="IF" condition="${sleeps_left} &lt;= 0">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:23:54.262669" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:23:54.262632" elapsed="0.000083"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:23:54.262616" elapsed="0.000121"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:54.262908" elapsed="0.000023"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:23:54.263045" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:23:54.263010" elapsed="0.000154"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:23:54.262993" elapsed="0.000196"/>
</if>
<kw name="Sleep" owner="BuiltIn">
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:54.263332" elapsed="0.000021"/>
</kw>
<var name="${sleeps_left}">0</var>
<status status="PASS" start="2026-04-18T03:23:54.174651" elapsed="0.088736"/>
</iter>
<var>${sleeps_left}</var>
<value>${count}-1</value>
<value>-1</value>
<value>-1</value>
<status status="PASS" start="2026-04-18T03:23:54.174261" elapsed="0.089162"/>
</for>
<kw name="Fail" owner="BuiltIn">
<arg>Logic error, we should have returned before.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:54.263594" elapsed="0.000022"/>
</kw>
<msg time="2026-04-18T03:23:54.263843" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:23:54.263890" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:23:54.263929" level="INFO">${result} = Validator failed: Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>count=${count}</arg>
<arg>getter=${getter}</arg>
<arg>safe_validator=${safe_validator}</arg>
<arg>initial_state=${state}</arg>
<doc>Pass only if consecutively 1 times in a row with 60 between attempts: ${getter} creates data and ${safe_validator} passes. Validator updates its state even if it reports failure. Always return validator state, status and message.</doc>
<status status="PASS" start="2026-04-18T03:23:54.168708" elapsed="0.095244"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:23:54.264148" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:23:54.264042" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:54.264024" elapsed="0.000191"/>
</if>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:23:54.265615" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:23:54.265702" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:23:54.265313" elapsed="0.000462">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:23:54.265887" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:23:54.265931" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:23:54.264916" elapsed="0.001037"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:23:54.266138" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:23:54.266029" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:54.266010" elapsed="0.000196"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:23:54.266637" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:23:54.266360" elapsed="0.000306"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:23:54.269828" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:23:54.269910" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:23:54.267186" elapsed="0.002786">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:23:54.270076" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:23:54.270118" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:23:54.266838" elapsed="0.003304"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:23:54.270326" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-18T03:23:54.270218" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:54.270199" elapsed="0.000212"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:54.270577" elapsed="0.000023"/>
</kw>
<arg>${result}</arg>
<arg>Not possible to succeed within the deadline.</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:23:54.264493" elapsed="0.006240"/>
</kw>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:23:54.272100" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:23:54.272331" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:23:54.271814" elapsed="0.000577">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:23:54.272492" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:23:54.272550" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:23:54.271415" elapsed="0.001161"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:23:54.272761" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:23:54.272652" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:54.272633" elapsed="0.000194"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:23:54.273246" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:23:54.272994" elapsed="0.000279"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:23:54.276251" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:23:54.276327" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:23:54.273799" elapsed="0.002587">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:23:54.276543" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:23:54.276591" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:23:54.273439" elapsed="0.003175"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:23:54.276799" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-04-18T03:23:54.276689" elapsed="0.000169"/>
</branch>
<status status="PASS" start="2026-04-18T03:23:54.276670" elapsed="0.000213"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:23:54.277042" elapsed="0.000023"/>
</kw>
<arg>${result}</arg>
<arg>Getter failed</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:23:54.271038" elapsed="0.006161"/>
</kw>
<kw name="Sleep" owner="BuiltIn">
<msg time="2026-04-18T03:24:54.277904" level="INFO">Slept 1 minute.</msg>
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="PASS" start="2026-04-18T03:23:54.277356" elapsed="60.000774"/>
</kw>
<var name="${try}">1</var>
<status status="PASS" start="2026-04-18T03:23:54.168163" elapsed="60.110127"/>
</iter>
<iter>
<kw name="Getter_And_Safe_Stateful_Validator_Have_To_Succeed_Consecutively_By_Deadline" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:24:54.282618" level="INFO">${result} = No result yet.</msg>
<var>${result}</var>
<arg>No result yet.</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:24:54.281853" elapsed="0.000829"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:24:54.283663" level="INFO">${state} = 0</msg>
<var>${state}</var>
<arg>${initial_state}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:24:54.283051" elapsed="0.000650"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:24:54.284443" level="INFO">${sleeps} = 0</msg>
<var>${sleeps}</var>
<arg>${count} - 1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:24:54.283932" elapsed="0.000548"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:24:54.286835" level="INFO">${date_now} = 2026-04-18 03:24:54.287</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:24:54.286588" elapsed="0.000286"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:24:54.287643" level="INFO">${time_deadline} = 919.878</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:24:54.287096" elapsed="0.000584"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:24:54.288466" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:24:54.287913" elapsed="0.000591"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:24:54.289031" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:24:54.288636" elapsed="0.000498"/>
</branch>
<status status="PASS" start="2026-04-18T03:24:54.288603" elapsed="0.000568"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:24:54.285395" elapsed="0.003859"/>
</kw>
<msg time="2026-04-18T03:24:54.289423" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:24:54.289488" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:24:54.284760" elapsed="0.004760"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:24:54.289838" elapsed="0.000024"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:24:54.289661" elapsed="0.000251"/>
</branch>
<status status="PASS" start="2026-04-18T03:24:54.289635" elapsed="0.000308"/>
</if>
<for flavor="IN RANGE">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_As_Is" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:24:54.293832" level="INFO">${keyword} = Get_Ipv4_Topology_Count</msg>
<msg time="2026-04-18T03:24:54.293901" level="INFO">${args} = []</msg>
<msg time="2026-04-18T03:24:54.293968" level="INFO">${kwargs} = {'session': 'operational', 'topology': 'example-ipv4-topology'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:24:54.293305" elapsed="0.000696"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Get_Ipv4_Topology_Count" owner="PrefixCounting">
<kw name="Get_Ipv4_Topology" owner="PrefixCounting">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:24:57.743578" level="INFO">GET Request : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01agv6blx930rdupfsp7wkuo902.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-18T03:24:57.769362" level="INFO">GET Response : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Transfer-Encoding': 'chunked'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xmlns="urn:opendaylight:params:xml:ns:yang:odl-bgp-topology-types"/&gt;&lt;/topology-types&gt;&lt;node&gt;&lt;node-id&gt;192.0.2.1&lt;/node-id&gt;&lt;igp-node-attributes xmlns="urn:TBD:params:xml:ns:yang:nt:l3-unicast-igp-topology"&gt;&lt;prefix&gt;&lt;prefix&gt;8.20.15.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.65.76.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.222.18.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.234.69.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.59.125.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.205.46.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.69.249.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.243.186.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.86.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.138.152.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.201.33.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.107.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.133.25.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.19.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.45.49.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.194.22.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.226.161.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.211.127.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.100.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.254.101.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.205.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.60.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.234.208.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.228.239.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.27.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.177.154.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.201.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.148.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.160.202.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.48.218.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.52.93.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.93.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.182.185.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.34.217.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.116.158.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.236.169.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.223.35.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.103.82.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.7.2.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.131.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.40.95.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.244.132.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.28.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.253.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.83.39.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.4.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.193.28.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.36.83.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.143.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.73.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.128.217.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.135.39.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.6.81.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.78.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.54.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.250.105.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.110.78.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.182.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.4.223.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.49.100.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.5.205.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.165.63.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.36.184.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.214.36.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.171.128.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.208.52.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.113.57.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.3.37.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.237.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.160.220.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.198.13.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.174.151.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.48.34.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.21.1.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.1.30.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.108.237.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.89.117.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.218.102.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.24.70.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.41.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.48.122.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.51.175.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.79.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.25.67.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.153.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.219.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.88.115.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.129.239.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.117.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.204.169.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.10.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.139.169.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.79.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.53.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.31.83.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.117.152.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.46.66.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.86.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.3.214.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.74.90.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.197.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.54.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.41.3.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.97.95.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.179.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.188.172.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.219.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.124.44.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.187.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.197.228.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.87.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.133.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.78.124.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.149.209.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.33.23.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.243.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.189.185.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.80.206.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.150.251.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.208.98.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.125.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.213.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.71.27.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.234.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.109.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.112.121.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.8.69.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.201.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.203.154.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.73.19.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.169.175.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.15.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.4.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.75.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.68.155.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.16.40.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.231.11.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.85.57.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.191.139.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.191.228.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.75.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.3.166.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.32.247.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.242.134.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.184.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.164.222.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.35.248.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.209.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.60.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.129.2.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.88.147.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.222.193.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.58.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.61.198.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.32.165.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.120.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.251.232.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.111.147.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.203.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.161.229.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.68.153.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.105.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.252.41.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.2.231.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.240.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.146.121.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.92.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.151.79.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.10.14.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.95.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.155.232.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.32.13.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.92.229.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.102.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.118.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.83.215.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.38.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.110.203.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.240.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.116.31.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.238.174.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.235.83.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.4.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.122.151.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.21.216.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.146.154.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.199.188.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.194.94.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.153.168.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.255.64.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.22.16/28&lt;/pref... (set the log level to DEBUG or TRACE to see the full content) 
 </msg>
<msg time="2026-04-18T03:24:57.769940" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${PC_NW_TOPOLOGY}=${topology}?content=nonconfig</arg>
<arg>expected_status=anything</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-18T03:24:54.297426" elapsed="3.472573"/>
</kw>
<if>
<branch type="IF" condition="${response.status_code} != 200">
<kw name="Fail" owner="BuiltIn">
<arg>Get on ${topology} returned status code ${response.status_code} with message: ${response.text}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:24:57.773168" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:24:57.770229" elapsed="0.003026"/>
</branch>
<status status="PASS" start="2026-04-18T03:24:57.770158" elapsed="0.003145"/>
</if>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-18T03:24:57.773406" elapsed="0.000077"/>
</return>
<msg time="2026-04-18T03:24:57.795510" level="INFO">${topology} = &lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xml...</msg>
<var>${topology}</var>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>GET the example-ipv4-topology data, check status is 200, return the topology data.</doc>
<status status="PASS" start="2026-04-18T03:24:54.296411" elapsed="3.499248"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:24:57.895024" level="INFO">${prefix_count} = 0</msg>
<var>${prefix_count}</var>
<arg>len(re.findall('"prefix":"', '''${topology}'''))</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:24:57.796019" elapsed="0.099106"/>
</kw>
<return>
<value>${prefix_count}</value>
<status status="PASS" start="2026-04-18T03:24:57.895250" elapsed="0.000057"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Get topology. If not fail, return number of prefixes in the topology.</doc>
<status status="PASS" start="2026-04-18T03:24:54.295024" elapsed="3.600579"/>
</kw>
<msg time="2026-04-18T03:24:57.895698" level="INFO">${result} = 0</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:24:54.294302" elapsed="3.601422"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:24:57.895776" elapsed="0.000028"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure without affecting arguments.</doc>
<status status="PASS" start="2026-04-18T03:24:54.292792" elapsed="3.603109"/>
</kw>
<msg time="2026-04-18T03:24:57.896000" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:24:57.896044" level="INFO">${message} = 0</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:24:54.292037" elapsed="3.604032"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:24:57.896291" elapsed="0.026792"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:24:57.924092" elapsed="0.000033"/>
</return>
<status status="PASS" start="2026-04-18T03:24:57.923957" elapsed="0.000202"/>
</branch>
<status status="PASS" start="2026-04-18T03:24:57.923935" elapsed="0.000249"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:24:57.924349" elapsed="0.000023"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with 0.</doc>
<status status="PASS" start="2026-04-18T03:24:57.923518" elapsed="0.000915"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:24:57.924495" elapsed="0.000027"/>
</return>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:24:54.291439" elapsed="3.633199"/>
</kw>
<msg time="2026-04-18T03:24:57.924737" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:24:57.924784" level="INFO">${data} = 0</msg>
<var>${status}</var>
<var>${data}</var>
<arg>ScalarClosures.Run_Keyword_And_Collect_Garbage</arg>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:24:54.290830" elapsed="3.633977"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Getter failed: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:24:57.924992" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:24:57.924883" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-04-18T03:24:57.924865" elapsed="0.000198"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:24:57.926481" level="INFO">${date_now} = 2026-04-18 03:24:57.926</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:24:57.926314" elapsed="0.000194"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:24:57.927061" level="INFO">${time_deadline} = 916.239</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:24:57.926686" elapsed="0.000401"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:24:57.927658" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:24:57.927250" elapsed="0.000435"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:24:57.928007" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:24:57.927757" elapsed="0.000305"/>
</branch>
<status status="PASS" start="2026-04-18T03:24:57.927738" elapsed="0.000347"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:24:57.925725" elapsed="0.002407"/>
</kw>
<msg time="2026-04-18T03:24:57.928230" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:24:57.928274" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:24:57.925223" elapsed="0.003074"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:24:57.928587" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:24:57.928444" elapsed="0.000193"/>
</branch>
<status status="PASS" start="2026-04-18T03:24:57.928425" elapsed="0.000235"/>
</if>
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_After_Replacing_First_Two_Arguments" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:24:57.930651" level="INFO">${keyword} = WaitUtils.Excluding_Stability_Safe_Stateful_Validator_As_Keyword</msg>
<msg time="2026-04-18T03:24:57.930701" level="INFO">${args} = ['0', 0]</msg>
<msg time="2026-04-18T03:24:57.930747" level="INFO">${kwargs} = {'excluded_value': '0'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:24:57.930314" elapsed="0.000456"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>0</arg>
<arg>${arg1}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:24:57.930934" elapsed="0.000206"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>1</arg>
<arg>${arg2}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:24:57.931300" elapsed="0.000190"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Excluding_Stability_Safe_Stateful_Validator_As_Keyword" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:24:57.933264" level="INFO">${new_state} = 0</msg>
<var>${new_state}</var>
<arg>${data}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:24:57.932868" elapsed="0.000423"/>
</kw>
<if>
<branch type="IF" condition="${data} == ${excluded_value}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Got the excluded value.</value>
<status status="PASS" start="2026-04-18T03:24:57.933550" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-18T03:24:57.933361" elapsed="0.000257"/>
</branch>
<status status="PASS" start="2026-04-18T03:24:57.933342" elapsed="0.000301"/>
</if>
<if>
<branch type="IF" condition="${data} != ${old_state}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Data value has changed.</value>
<status status="NOT RUN" start="2026-04-18T03:24:57.933733" elapsed="0.000147"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:24:57.933699" elapsed="0.000219"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:24:57.933683" elapsed="0.000257"/>
</if>
<return>
<value>${new_state}</value>
<value>PASS</value>
<value>Validated stable: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:24:57.933972" elapsed="0.000015"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Report failure if got the excluded value or if data value changed from last time. Useful to become validator.</doc>
<status status="PASS" start="2026-04-18T03:24:57.932360" elapsed="0.001733"/>
</kw>
<msg time="2026-04-18T03:24:57.934179" level="INFO">${result} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:24:57.931693" elapsed="0.002510"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:24:57.934252" elapsed="0.000027"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure with replaced first two positional arguments.</doc>
<status status="PASS" start="2026-04-18T03:24:57.929918" elapsed="0.004452"/>
</kw>
<msg time="2026-04-18T03:24:57.934460" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:24:57.934504" level="INFO">${message} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:24:57.929349" elapsed="0.005193"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:24:57.934709" elapsed="0.021624"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:24:57.957374" elapsed="0.000033"/>
</return>
<status status="PASS" start="2026-04-18T03:24:57.957241" elapsed="0.000200"/>
</branch>
<status status="PASS" start="2026-04-18T03:24:57.957217" elapsed="0.000249"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:24:57.957648" elapsed="0.000023"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with [0, 'FAIL', 'Got the excluded value.'].</doc>
<status status="PASS" start="2026-04-18T03:24:57.956829" elapsed="0.000903"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:24:57.957777" elapsed="0.000026"/>
</return>
<msg time="2026-04-18T03:24:57.957947" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:24:57.957993" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:24:57.958034" level="INFO">${result} = Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>ScalarClosures.Run_Closure_After_Replacing_First_Two_Arguments</arg>
<arg>${safe_validator}</arg>
<arg>${state}</arg>
<arg>${data}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:24:57.928885" elapsed="0.029171"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Validator failed: ${result}</value>
<status status="PASS" start="2026-04-18T03:24:57.958243" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-04-18T03:24:57.958137" elapsed="0.000169"/>
</branch>
<status status="PASS" start="2026-04-18T03:24:57.958120" elapsed="0.000211"/>
</if>
<if>
<branch type="IF" condition="${sleeps_left} &lt;= 0">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:24:57.958423" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:24:57.958385" elapsed="0.000084"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:24:57.958370" elapsed="0.000121"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-18T03:24:57.958671" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:24:57.958807" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:24:57.958771" elapsed="0.000155"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:24:57.958754" elapsed="0.000198"/>
</if>
<kw name="Sleep" owner="BuiltIn">
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-04-18T03:24:57.959094" elapsed="0.000021"/>
</kw>
<var name="${sleeps_left}">0</var>
<status status="PASS" start="2026-04-18T03:24:54.290614" elapsed="3.668534"/>
</iter>
<var>${sleeps_left}</var>
<value>${count}-1</value>
<value>-1</value>
<value>-1</value>
<status status="PASS" start="2026-04-18T03:24:54.289998" elapsed="3.669276"/>
</for>
<kw name="Fail" owner="BuiltIn">
<arg>Logic error, we should have returned before.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:24:57.959431" elapsed="0.000021"/>
</kw>
<msg time="2026-04-18T03:24:57.959672" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:24:57.959717" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:24:57.959758" level="INFO">${result} = Validator failed: Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>count=${count}</arg>
<arg>getter=${getter}</arg>
<arg>safe_validator=${safe_validator}</arg>
<arg>initial_state=${state}</arg>
<doc>Pass only if consecutively 1 times in a row with 60 between attempts: ${getter} creates data and ${safe_validator} passes. Validator updates its state even if it reports failure. Always return validator state, status and message.</doc>
<status status="PASS" start="2026-04-18T03:24:54.280121" elapsed="3.679661"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:24:57.959974" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:24:57.959869" elapsed="0.000149"/>
</branch>
<status status="PASS" start="2026-04-18T03:24:57.959851" elapsed="0.000190"/>
</if>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:24:57.961452" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:24:57.961556" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:24:57.961175" elapsed="0.000453">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:24:57.961731" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:24:57.961773" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:24:57.960794" elapsed="0.001002"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:24:57.961978" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:24:57.961869" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-18T03:24:57.961851" elapsed="0.000193"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:24:57.962451" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:24:57.962194" elapsed="0.000285"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:24:57.965621" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:24:57.965698" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:24:57.963001" elapsed="0.002758">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:24:57.965862" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:24:57.965906" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:24:57.962662" elapsed="0.003267"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:24:57.966109" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-04-18T03:24:57.966002" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-04-18T03:24:57.965983" elapsed="0.000208"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:24:57.966341" elapsed="0.000022"/>
</kw>
<arg>${result}</arg>
<arg>Not possible to succeed within the deadline.</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:24:57.960370" elapsed="0.006123"/>
</kw>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:24:57.967780" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:24:57.967853" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:24:57.967505" elapsed="0.000405">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:24:57.968009" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:24:57.968051" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:24:57.967165" elapsed="0.000908"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:24:57.968253" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:24:57.968146" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-04-18T03:24:57.968128" elapsed="0.000190"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:24:57.968793" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:24:57.968518" elapsed="0.000301"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:24:57.971765" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:24:57.971839" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:24:57.969320" elapsed="0.002576">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:24:57.972058" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:24:57.972102" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:24:57.968985" elapsed="0.003140"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:24:57.972307" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-04-18T03:24:57.972199" elapsed="0.000175"/>
</branch>
<status status="PASS" start="2026-04-18T03:24:57.972180" elapsed="0.000220"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:24:57.972585" elapsed="0.000023"/>
</kw>
<arg>${result}</arg>
<arg>Getter failed</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:24:57.966790" elapsed="0.005950"/>
</kw>
<kw name="Sleep" owner="BuiltIn">
<msg time="2026-04-18T03:25:57.973799" level="INFO">Slept 1 minute.</msg>
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="PASS" start="2026-04-18T03:24:57.972908" elapsed="60.001474"/>
</kw>
<var name="${try}">2</var>
<status status="PASS" start="2026-04-18T03:24:54.278787" elapsed="63.695798"/>
</iter>
<iter>
<kw name="Getter_And_Safe_Stateful_Validator_Have_To_Succeed_Consecutively_By_Deadline" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:25:57.979202" level="INFO">${result} = No result yet.</msg>
<var>${result}</var>
<arg>No result yet.</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:25:57.978457" elapsed="0.000808"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:25:57.980236" level="INFO">${state} = 0</msg>
<var>${state}</var>
<arg>${initial_state}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:25:57.979706" elapsed="0.000568"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:25:57.981056" level="INFO">${sleeps} = 0</msg>
<var>${sleeps}</var>
<arg>${count} - 1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:25:57.980503" elapsed="0.000592"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:25:57.983370" level="INFO">${date_now} = 2026-04-18 03:25:57.983</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:25:57.983128" elapsed="0.000280"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:25:57.984208" level="INFO">${time_deadline} = 856.182</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:25:57.983668" elapsed="0.000578"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:25:57.985048" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:25:57.984479" elapsed="0.000607"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:25:57.985573" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:25:57.985194" elapsed="0.000460"/>
</branch>
<status status="PASS" start="2026-04-18T03:25:57.985163" elapsed="0.000527"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:25:57.981988" elapsed="0.003772"/>
</kw>
<msg time="2026-04-18T03:25:57.985902" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:25:57.985963" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:25:57.981335" elapsed="0.004660"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:25:57.986259" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:25:57.986107" elapsed="0.000224"/>
</branch>
<status status="PASS" start="2026-04-18T03:25:57.986082" elapsed="0.000279"/>
</if>
<for flavor="IN RANGE">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_As_Is" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:25:57.990218" level="INFO">${keyword} = Get_Ipv4_Topology_Count</msg>
<msg time="2026-04-18T03:25:57.990285" level="INFO">${args} = []</msg>
<msg time="2026-04-18T03:25:57.990351" level="INFO">${kwargs} = {'session': 'operational', 'topology': 'example-ipv4-topology'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:25:57.989694" elapsed="0.000690"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Get_Ipv4_Topology_Count" owner="PrefixCounting">
<kw name="Get_Ipv4_Topology" owner="PrefixCounting">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:26:01.450295" level="INFO">GET Request : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01agv6blx930rdupfsp7wkuo902.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-18T03:26:01.476207" level="INFO">GET Response : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Transfer-Encoding': 'chunked'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xmlns="urn:opendaylight:params:xml:ns:yang:odl-bgp-topology-types"/&gt;&lt;/topology-types&gt;&lt;node&gt;&lt;node-id&gt;192.0.2.1&lt;/node-id&gt;&lt;igp-node-attributes xmlns="urn:TBD:params:xml:ns:yang:nt:l3-unicast-igp-topology"&gt;&lt;prefix&gt;&lt;prefix&gt;8.20.15.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.65.76.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.222.18.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.234.69.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.59.125.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.205.46.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.69.249.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.243.186.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.86.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.138.152.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.201.33.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.107.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.133.25.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.19.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.45.49.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.194.22.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.226.161.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.211.127.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.100.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.254.101.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.205.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.60.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.234.208.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.228.239.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.27.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.177.154.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.201.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.148.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.160.202.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.48.218.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.52.93.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.93.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.182.185.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.34.217.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.116.158.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.236.169.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.223.35.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.103.82.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.7.2.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.131.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.40.95.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.244.132.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.28.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.253.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.83.39.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.4.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.193.28.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.36.83.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.143.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.73.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.128.217.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.135.39.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.6.81.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.78.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.54.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.250.105.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.110.78.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.182.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.4.223.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.49.100.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.5.205.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.165.63.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.36.184.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.214.36.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.171.128.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.208.52.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.113.57.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.3.37.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.237.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.160.220.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.198.13.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.174.151.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.48.34.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.21.1.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.1.30.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.108.237.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.89.117.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.218.102.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.24.70.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.41.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.48.122.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.51.175.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.79.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.25.67.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.153.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.219.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.88.115.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.129.239.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.117.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.204.169.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.10.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.139.169.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.79.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.53.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.31.83.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.117.152.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.46.66.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.86.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.3.214.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.74.90.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.197.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.54.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.41.3.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.97.95.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.179.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.188.172.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.219.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.124.44.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.187.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.197.228.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.87.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.133.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.78.124.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.149.209.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.33.23.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.243.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.189.185.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.80.206.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.150.251.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.208.98.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.125.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.213.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.71.27.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.234.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.109.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.112.121.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.8.69.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.201.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.203.154.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.73.19.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.169.175.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.15.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.4.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.75.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.68.155.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.16.40.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.231.11.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.85.57.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.191.139.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.191.228.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.75.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.3.166.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.32.247.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.242.134.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.184.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.164.222.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.35.248.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.209.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.60.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.129.2.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.88.147.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.222.193.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.58.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.61.198.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.32.165.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.120.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.251.232.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.111.147.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.203.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.161.229.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.68.153.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.105.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.252.41.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.2.231.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.240.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.146.121.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.92.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.151.79.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.10.14.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.95.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.155.232.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.32.13.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.92.229.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.102.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.118.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.83.215.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.38.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.110.203.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.240.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.116.31.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.238.174.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.235.83.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.4.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.122.151.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.21.216.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.146.154.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.199.188.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.194.94.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.153.168.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.255.64.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.22.16/28&lt;/pref... (set the log level to DEBUG or TRACE to see the full content) 
 </msg>
<msg time="2026-04-18T03:26:01.476805" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${PC_NW_TOPOLOGY}=${topology}?content=nonconfig</arg>
<arg>expected_status=anything</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-18T03:25:57.993794" elapsed="3.483072"/>
</kw>
<if>
<branch type="IF" condition="${response.status_code} != 200">
<kw name="Fail" owner="BuiltIn">
<arg>Get on ${topology} returned status code ${response.status_code} with message: ${response.text}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:26:01.479917" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:26:01.477093" elapsed="0.002906"/>
</branch>
<status status="PASS" start="2026-04-18T03:26:01.477023" elapsed="0.003023"/>
</if>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-18T03:26:01.480149" elapsed="0.000077"/>
</return>
<msg time="2026-04-18T03:26:01.487416" level="INFO">${topology} = &lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xml...</msg>
<var>${topology}</var>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>GET the example-ipv4-topology data, check status is 200, return the topology data.</doc>
<status status="PASS" start="2026-04-18T03:25:57.992815" elapsed="3.494774"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:26:01.576821" level="INFO">${prefix_count} = 0</msg>
<var>${prefix_count}</var>
<arg>len(re.findall('"prefix":"', '''${topology}'''))</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:26:01.487958" elapsed="0.088965"/>
</kw>
<return>
<value>${prefix_count}</value>
<status status="PASS" start="2026-04-18T03:26:01.577048" elapsed="0.000058"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Get topology. If not fail, return number of prefixes in the topology.</doc>
<status status="PASS" start="2026-04-18T03:25:57.991325" elapsed="3.586060"/>
</kw>
<msg time="2026-04-18T03:26:01.577481" level="INFO">${result} = 0</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:25:57.990650" elapsed="3.586857"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:26:01.577577" elapsed="0.000029"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure without affecting arguments.</doc>
<status status="PASS" start="2026-04-18T03:25:57.989162" elapsed="3.588541"/>
</kw>
<msg time="2026-04-18T03:26:01.577800" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:26:01.577845" level="INFO">${message} = 0</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:25:57.988407" elapsed="3.589461"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:26:01.578107" elapsed="0.027757"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:26:01.607026" elapsed="0.000039"/>
</return>
<status status="PASS" start="2026-04-18T03:26:01.606890" elapsed="0.000212"/>
</branch>
<status status="PASS" start="2026-04-18T03:26:01.606865" elapsed="0.000264"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:26:01.607305" elapsed="0.000023"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with 0.</doc>
<status status="PASS" start="2026-04-18T03:26:01.606433" elapsed="0.000957"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:26:01.607434" elapsed="0.000027"/>
</return>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:25:57.987839" elapsed="3.619737"/>
</kw>
<msg time="2026-04-18T03:26:01.607679" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:26:01.607725" level="INFO">${data} = 0</msg>
<var>${status}</var>
<var>${data}</var>
<arg>ScalarClosures.Run_Keyword_And_Collect_Garbage</arg>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:25:57.987198" elapsed="3.620549"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Getter failed: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:26:01.607931" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:26:01.607824" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-18T03:26:01.607806" elapsed="0.000195"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:26:01.609484" level="INFO">${date_now} = 2026-04-18 03:26:01.609</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:26:01.609304" elapsed="0.000207"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:26:01.610091" level="INFO">${time_deadline} = 852.556</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:26:01.609683" elapsed="0.000434"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:26:01.610694" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:26:01.610284" elapsed="0.000437"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:26:01.611041" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:26:01.610792" elapsed="0.000303"/>
</branch>
<status status="PASS" start="2026-04-18T03:26:01.610772" elapsed="0.000349"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:26:01.608703" elapsed="0.002498"/>
</kw>
<msg time="2026-04-18T03:26:01.611307" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:26:01.611352" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:26:01.608164" elapsed="0.003216"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:26:01.611736" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:26:01.611603" elapsed="0.000200"/>
</branch>
<status status="PASS" start="2026-04-18T03:26:01.611574" elapsed="0.000257"/>
</if>
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_After_Replacing_First_Two_Arguments" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:26:01.614196" level="INFO">${keyword} = WaitUtils.Excluding_Stability_Safe_Stateful_Validator_As_Keyword</msg>
<msg time="2026-04-18T03:26:01.614248" level="INFO">${args} = [0, 0]</msg>
<msg time="2026-04-18T03:26:01.614293" level="INFO">${kwargs} = {'excluded_value': '0'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:26:01.613630" elapsed="0.000686"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>0</arg>
<arg>${arg1}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:26:01.614487" elapsed="0.000246"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>1</arg>
<arg>${arg2}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:26:01.614902" elapsed="0.000267"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Excluding_Stability_Safe_Stateful_Validator_As_Keyword" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:26:01.617017" level="INFO">${new_state} = 0</msg>
<var>${new_state}</var>
<arg>${data}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:26:01.616567" elapsed="0.000477"/>
</kw>
<if>
<branch type="IF" condition="${data} == ${excluded_value}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Got the excluded value.</value>
<status status="PASS" start="2026-04-18T03:26:01.617300" elapsed="0.000037"/>
</return>
<status status="PASS" start="2026-04-18T03:26:01.617119" elapsed="0.000260"/>
</branch>
<status status="PASS" start="2026-04-18T03:26:01.617098" elapsed="0.000308"/>
</if>
<if>
<branch type="IF" condition="${data} != ${old_state}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Data value has changed.</value>
<status status="NOT RUN" start="2026-04-18T03:26:01.617499" elapsed="0.000202"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:26:01.617463" elapsed="0.000277"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:26:01.617447" elapsed="0.000316"/>
</if>
<return>
<value>${new_state}</value>
<value>PASS</value>
<value>Validated stable: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:26:01.617796" elapsed="0.000014"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Report failure if got the excluded value or if data value changed from last time. Useful to become validator.</doc>
<status status="PASS" start="2026-04-18T03:26:01.616079" elapsed="0.001840"/>
</kw>
<msg time="2026-04-18T03:26:01.618053" level="INFO">${result} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:26:01.615345" elapsed="0.002733"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:26:01.618127" elapsed="0.000027"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure with replaced first two positional arguments.</doc>
<status status="PASS" start="2026-04-18T03:26:01.613205" elapsed="0.005040"/>
</kw>
<msg time="2026-04-18T03:26:01.618336" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:26:01.618381" level="INFO">${message} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:26:01.612639" elapsed="0.005765"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:26:01.618589" elapsed="0.036865"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:26:01.656509" elapsed="0.000053"/>
</return>
<status status="PASS" start="2026-04-18T03:26:01.656375" elapsed="0.000222"/>
</branch>
<status status="PASS" start="2026-04-18T03:26:01.656351" elapsed="0.000272"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:26:01.656795" elapsed="0.000023"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with [0, 'FAIL', 'Got the excluded value.'].</doc>
<status status="PASS" start="2026-04-18T03:26:01.655955" elapsed="0.000924"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:26:01.656923" elapsed="0.000027"/>
</return>
<msg time="2026-04-18T03:26:01.657098" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:26:01.657144" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:26:01.657183" level="INFO">${result} = Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>ScalarClosures.Run_Closure_After_Replacing_First_Two_Arguments</arg>
<arg>${safe_validator}</arg>
<arg>${state}</arg>
<arg>${data}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:26:01.612106" elapsed="0.045099"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Validator failed: ${result}</value>
<status status="PASS" start="2026-04-18T03:26:01.657395" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-04-18T03:26:01.657287" elapsed="0.000170"/>
</branch>
<status status="PASS" start="2026-04-18T03:26:01.657269" elapsed="0.000212"/>
</if>
<if>
<branch type="IF" condition="${sleeps_left} &lt;= 0">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:26:01.657589" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:26:01.657551" elapsed="0.000084"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:26:01.657519" elapsed="0.000138"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-18T03:26:01.657817" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:26:01.657990" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:26:01.657917" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:26:01.657901" elapsed="0.000237"/>
</if>
<kw name="Sleep" owner="BuiltIn">
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-04-18T03:26:01.658283" elapsed="0.000021"/>
</kw>
<var name="${sleeps_left}">0</var>
<status status="PASS" start="2026-04-18T03:25:57.986989" elapsed="3.671349"/>
</iter>
<var>${sleeps_left}</var>
<value>${count}-1</value>
<value>-1</value>
<value>-1</value>
<status status="PASS" start="2026-04-18T03:25:57.986416" elapsed="3.671959"/>
</for>
<kw name="Fail" owner="BuiltIn">
<arg>Logic error, we should have returned before.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:26:01.658544" elapsed="0.000021"/>
</kw>
<msg time="2026-04-18T03:26:01.658772" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:26:01.658816" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:26:01.658856" level="INFO">${result} = Validator failed: Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>count=${count}</arg>
<arg>getter=${getter}</arg>
<arg>safe_validator=${safe_validator}</arg>
<arg>initial_state=${state}</arg>
<doc>Pass only if consecutively 1 times in a row with 60 between attempts: ${getter} creates data and ${safe_validator} passes. Validator updates its state even if it reports failure. Always return validator state, status and message.</doc>
<status status="PASS" start="2026-04-18T03:25:57.976674" elapsed="3.682205"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:26:01.659074" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:26:01.658967" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-04-18T03:26:01.658949" elapsed="0.000190"/>
</if>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:26:01.660502" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:26:01.660605" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:26:01.660214" elapsed="0.000464">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:26:01.660780" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:26:01.660822" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:26:01.659815" elapsed="0.001029"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:26:01.661026" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:26:01.660917" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-18T03:26:01.660899" elapsed="0.000193"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:26:01.661503" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:26:01.661244" elapsed="0.000302"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:26:01.664717" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:26:01.664793" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:26:01.662071" elapsed="0.002781">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:26:01.664953" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:26:01.664995" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:26:01.661715" elapsed="0.003303"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:26:01.665199" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-18T03:26:01.665092" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-04-18T03:26:01.665073" elapsed="0.000209"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:26:01.665432" elapsed="0.000021"/>
</kw>
<arg>${result}</arg>
<arg>Not possible to succeed within the deadline.</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:26:01.659415" elapsed="0.006186"/>
</kw>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:26:01.666900" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:26:01.666973" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:26:01.666642" elapsed="0.000389">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:26:01.667130" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:26:01.667172" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:26:01.666286" elapsed="0.000909"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:26:01.667375" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:26:01.667268" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-04-18T03:26:01.667250" elapsed="0.000191"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:26:01.667853" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:26:01.667605" elapsed="0.000274"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:26:01.671174" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:26:01.671253" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:26:01.668377" elapsed="0.002936">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:26:01.671483" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:26:01.671552" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:26:01.668044" elapsed="0.003533"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:26:01.671769" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-18T03:26:01.671657" elapsed="0.000174"/>
</branch>
<status status="PASS" start="2026-04-18T03:26:01.671636" elapsed="0.000219"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:26:01.672067" elapsed="0.000023"/>
</kw>
<arg>${result}</arg>
<arg>Getter failed</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:26:01.665884" elapsed="0.006347"/>
</kw>
<kw name="Sleep" owner="BuiltIn">
<msg time="2026-04-18T03:27:01.672936" level="INFO">Slept 1 minute.</msg>
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="PASS" start="2026-04-18T03:26:01.672389" elapsed="60.000778"/>
</kw>
<var name="${try}">3</var>
<status status="PASS" start="2026-04-18T03:25:57.975182" elapsed="63.698095"/>
</iter>
<iter>
<kw name="Getter_And_Safe_Stateful_Validator_Have_To_Succeed_Consecutively_By_Deadline" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:27:01.678234" level="INFO">${result} = No result yet.</msg>
<var>${result}</var>
<arg>No result yet.</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:27:01.677387" elapsed="0.000912"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:27:01.679126" level="INFO">${state} = 0</msg>
<var>${state}</var>
<arg>${initial_state}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:27:01.678703" elapsed="0.000460"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:27:01.679911" level="INFO">${sleeps} = 0</msg>
<var>${sleeps}</var>
<arg>${count} - 1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:27:01.679393" elapsed="0.000555"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:27:01.682518" level="INFO">${date_now} = 2026-04-18 03:27:01.682</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:27:01.682211" elapsed="0.000390"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:27:01.683600" level="INFO">${time_deadline} = 792.483</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:27:01.682906" elapsed="0.000748"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:27:01.684666" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:27:01.683977" elapsed="0.000728"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:27:01.685174" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:27:01.684813" elapsed="0.000440"/>
</branch>
<status status="PASS" start="2026-04-18T03:27:01.684783" elapsed="0.000505"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:27:01.680839" elapsed="0.004520"/>
</kw>
<msg time="2026-04-18T03:27:01.685502" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:27:01.685589" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:27:01.680188" elapsed="0.005436"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:27:01.685933" elapsed="0.000024"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:27:01.685739" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-04-18T03:27:01.685713" elapsed="0.000323"/>
</if>
<for flavor="IN RANGE">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_As_Is" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:27:01.689045" level="INFO">${keyword} = Get_Ipv4_Topology_Count</msg>
<msg time="2026-04-18T03:27:01.689093" level="INFO">${args} = []</msg>
<msg time="2026-04-18T03:27:01.689141" level="INFO">${kwargs} = {'session': 'operational', 'topology': 'example-ipv4-topology'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:27:01.688654" elapsed="0.000511"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Get_Ipv4_Topology_Count" owner="PrefixCounting">
<kw name="Get_Ipv4_Topology" owner="PrefixCounting">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:27:05.165775" level="INFO">GET Request : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01agv6blx930rdupfsp7wkuo902.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-18T03:27:05.201187" level="INFO">GET Response : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Transfer-Encoding': 'chunked'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xmlns="urn:opendaylight:params:xml:ns:yang:odl-bgp-topology-types"/&gt;&lt;/topology-types&gt;&lt;node&gt;&lt;node-id&gt;192.0.2.1&lt;/node-id&gt;&lt;igp-node-attributes xmlns="urn:TBD:params:xml:ns:yang:nt:l3-unicast-igp-topology"&gt;&lt;prefix&gt;&lt;prefix&gt;8.20.15.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.65.76.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.222.18.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.234.69.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.59.125.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.205.46.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.69.249.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.243.186.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.86.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.138.152.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.201.33.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.107.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.133.25.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.19.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.45.49.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.194.22.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.226.161.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.211.127.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.100.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.254.101.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.205.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.60.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.234.208.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.228.239.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.27.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.177.154.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.201.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.148.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.160.202.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.48.218.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.52.93.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.93.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.182.185.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.34.217.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.116.158.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.236.169.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.223.35.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.103.82.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.7.2.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.131.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.40.95.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.244.132.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.28.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.253.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.83.39.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.4.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.193.28.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.36.83.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.143.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.73.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.128.217.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.135.39.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.6.81.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.78.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.54.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.250.105.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.110.78.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.182.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.4.223.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.49.100.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.5.205.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.165.63.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.36.184.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.214.36.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.171.128.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.208.52.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.113.57.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.3.37.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.237.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.160.220.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.198.13.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.174.151.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.48.34.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.21.1.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.1.30.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.108.237.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.89.117.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.218.102.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.24.70.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.41.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.48.122.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.51.175.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.79.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.25.67.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.153.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.219.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.88.115.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.129.239.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.117.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.204.169.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.10.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.139.169.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.79.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.53.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.31.83.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.117.152.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.46.66.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.86.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.3.214.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.74.90.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.197.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.54.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.41.3.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.97.95.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.179.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.188.172.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.219.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.124.44.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.187.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.197.228.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.87.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.133.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.78.124.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.149.209.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.33.23.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.243.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.189.185.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.80.206.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.150.251.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.208.98.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.125.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.213.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.71.27.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.234.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.109.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.112.121.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.8.69.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.201.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.203.154.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.73.19.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.169.175.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.15.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.4.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.75.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.68.155.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.16.40.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.231.11.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.85.57.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.191.139.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.191.228.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.75.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.3.166.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.32.247.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.242.134.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.184.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.164.222.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.35.248.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.209.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.60.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.129.2.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.88.147.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.222.193.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.58.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.61.198.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.32.165.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.120.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.251.232.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.111.147.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.203.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.161.229.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.68.153.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.105.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.252.41.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.2.231.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.240.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.146.121.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.92.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.151.79.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.10.14.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.95.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.155.232.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.32.13.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.92.229.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.102.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.118.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.83.215.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.38.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.110.203.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.240.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.116.31.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.238.174.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.235.83.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.4.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.122.151.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.21.216.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.146.154.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.199.188.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.194.94.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.153.168.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.255.64.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.22.16/28&lt;/pref... (set the log level to DEBUG or TRACE to see the full content) 
 </msg>
<msg time="2026-04-18T03:27:05.204306" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${PC_NW_TOPOLOGY}=${topology}?content=nonconfig</arg>
<arg>expected_status=anything</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-18T03:27:01.692119" elapsed="3.512248"/>
</kw>
<if>
<branch type="IF" condition="${response.status_code} != 200">
<kw name="Fail" owner="BuiltIn">
<arg>Get on ${topology} returned status code ${response.status_code} with message: ${response.text}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:27:05.207636" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:27:05.204618" elapsed="0.003108"/>
</branch>
<status status="PASS" start="2026-04-18T03:27:05.204542" elapsed="0.003243"/>
</if>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-18T03:27:05.207901" elapsed="0.000085"/>
</return>
<msg time="2026-04-18T03:27:05.237061" level="INFO">${topology} = &lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xml...</msg>
<var>${topology}</var>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>GET the example-ipv4-topology data, check status is 200, return the topology data.</doc>
<status status="PASS" start="2026-04-18T03:27:01.691125" elapsed="3.546063"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:27:05.342069" level="INFO">${prefix_count} = 0</msg>
<var>${prefix_count}</var>
<arg>len(re.findall('"prefix":"', '''${topology}'''))</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:27:05.237582" elapsed="0.104682"/>
</kw>
<return>
<value>${prefix_count}</value>
<status status="PASS" start="2026-04-18T03:27:05.342394" elapsed="0.000061"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Get topology. If not fail, return number of prefixes in the topology.</doc>
<status status="PASS" start="2026-04-18T03:27:01.689878" elapsed="3.652874"/>
</kw>
<msg time="2026-04-18T03:27:05.342855" level="INFO">${result} = 0</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:27:01.689336" elapsed="3.653545"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:27:05.342934" elapsed="0.000029"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure without affecting arguments.</doc>
<status status="PASS" start="2026-04-18T03:27:01.688266" elapsed="3.654794"/>
</kw>
<msg time="2026-04-18T03:27:05.343161" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:27:05.343207" level="INFO">${message} = 0</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:27:01.687737" elapsed="3.655494"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:27:05.343458" elapsed="0.027459"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:27:05.371979" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-04-18T03:27:05.371844" elapsed="0.000203"/>
</branch>
<status status="PASS" start="2026-04-18T03:27:05.371821" elapsed="0.000251"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:27:05.372260" elapsed="0.000023"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with 0.</doc>
<status status="PASS" start="2026-04-18T03:27:05.371358" elapsed="0.000986"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:27:05.372389" elapsed="0.000028"/>
</return>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:27:01.687291" elapsed="3.685222"/>
</kw>
<msg time="2026-04-18T03:27:05.372637" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:27:05.372684" level="INFO">${data} = 0</msg>
<var>${status}</var>
<var>${data}</var>
<arg>ScalarClosures.Run_Keyword_And_Collect_Garbage</arg>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:27:01.686850" elapsed="3.685857"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Getter failed: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:27:05.372892" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:27:05.372784" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-18T03:27:05.372766" elapsed="0.000198"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:27:05.374402" level="INFO">${date_now} = 2026-04-18 03:27:05.374</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:27:05.374232" elapsed="0.000198"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:27:05.374975" level="INFO">${time_deadline} = 788.791</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:27:05.374602" elapsed="0.000400"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:27:05.375577" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:27:05.375167" elapsed="0.000438"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:27:05.375931" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:27:05.375678" elapsed="0.000308"/>
</branch>
<status status="PASS" start="2026-04-18T03:27:05.375659" elapsed="0.000351"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:27:05.373632" elapsed="0.002426"/>
</kw>
<msg time="2026-04-18T03:27:05.376178" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:27:05.376223" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:27:05.373127" elapsed="0.003120"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:27:05.376503" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:27:05.376394" elapsed="0.000180"/>
</branch>
<status status="PASS" start="2026-04-18T03:27:05.376375" elapsed="0.000222"/>
</if>
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_After_Replacing_First_Two_Arguments" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:27:05.378586" level="INFO">${keyword} = WaitUtils.Excluding_Stability_Safe_Stateful_Validator_As_Keyword</msg>
<msg time="2026-04-18T03:27:05.378636" level="INFO">${args} = [0, 0]</msg>
<msg time="2026-04-18T03:27:05.378683" level="INFO">${kwargs} = {'excluded_value': '0'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:27:05.378259" elapsed="0.000448"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>0</arg>
<arg>${arg1}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:27:05.378873" elapsed="0.000209"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>1</arg>
<arg>${arg2}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:27:05.379243" elapsed="0.000191"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Excluding_Stability_Safe_Stateful_Validator_As_Keyword" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:27:05.381199" level="INFO">${new_state} = 0</msg>
<var>${new_state}</var>
<arg>${data}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:27:05.380795" elapsed="0.000430"/>
</kw>
<if>
<branch type="IF" condition="${data} == ${excluded_value}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Got the excluded value.</value>
<status status="PASS" start="2026-04-18T03:27:05.381468" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-18T03:27:05.381296" elapsed="0.000257"/>
</branch>
<status status="PASS" start="2026-04-18T03:27:05.381277" elapsed="0.000302"/>
</if>
<if>
<branch type="IF" condition="${data} != ${old_state}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Data value has changed.</value>
<status status="NOT RUN" start="2026-04-18T03:27:05.381670" elapsed="0.000148"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:27:05.381635" elapsed="0.000221"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:27:05.381619" elapsed="0.000260"/>
</if>
<return>
<value>${new_state}</value>
<value>PASS</value>
<value>Validated stable: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:27:05.381912" elapsed="0.000014"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Report failure if got the excluded value or if data value changed from last time. Useful to become validator.</doc>
<status status="PASS" start="2026-04-18T03:27:05.380327" elapsed="0.001705"/>
</kw>
<msg time="2026-04-18T03:27:05.382125" level="INFO">${result} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:27:05.379617" elapsed="0.002542"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:27:05.382222" elapsed="0.000031"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure with replaced first two positional arguments.</doc>
<status status="PASS" start="2026-04-18T03:27:05.377859" elapsed="0.004491"/>
</kw>
<msg time="2026-04-18T03:27:05.382443" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:27:05.382489" level="INFO">${message} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:27:05.377296" elapsed="0.005216"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:27:05.382701" elapsed="0.025338"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:27:05.409080" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-04-18T03:27:05.408945" elapsed="0.000203"/>
</branch>
<status status="PASS" start="2026-04-18T03:27:05.408921" elapsed="0.000253"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:27:05.409338" elapsed="0.000022"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with [0, 'FAIL', 'Got the excluded value.'].</doc>
<status status="PASS" start="2026-04-18T03:27:05.408503" elapsed="0.000918"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:27:05.409465" elapsed="0.000027"/>
</return>
<msg time="2026-04-18T03:27:05.409654" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:27:05.409701" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:27:05.409742" level="INFO">${result} = Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>ScalarClosures.Run_Closure_After_Replacing_First_Two_Arguments</arg>
<arg>${safe_validator}</arg>
<arg>${state}</arg>
<arg>${data}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:27:05.376826" elapsed="0.032939"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Validator failed: ${result}</value>
<status status="PASS" start="2026-04-18T03:27:05.409954" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-04-18T03:27:05.409847" elapsed="0.000170"/>
</branch>
<status status="PASS" start="2026-04-18T03:27:05.409829" elapsed="0.000212"/>
</if>
<if>
<branch type="IF" condition="${sleeps_left} &lt;= 0">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:27:05.410131" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:27:05.410095" elapsed="0.000081"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:27:05.410079" elapsed="0.000119"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-18T03:27:05.410356" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:27:05.410490" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:27:05.410455" elapsed="0.000169"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:27:05.410438" elapsed="0.000213"/>
</if>
<kw name="Sleep" owner="BuiltIn">
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-04-18T03:27:05.410797" elapsed="0.000021"/>
</kw>
<var name="${sleeps_left}">0</var>
<status status="PASS" start="2026-04-18T03:27:01.686667" elapsed="3.724185"/>
</iter>
<var>${sleeps_left}</var>
<value>${count}-1</value>
<value>-1</value>
<value>-1</value>
<status status="PASS" start="2026-04-18T03:27:01.686091" elapsed="3.724796"/>
</for>
<kw name="Fail" owner="BuiltIn">
<arg>Logic error, we should have returned before.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:27:05.411041" elapsed="0.000021"/>
</kw>
<msg time="2026-04-18T03:27:05.411264" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:27:05.411310" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:27:05.411350" level="INFO">${result} = Validator failed: Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>count=${count}</arg>
<arg>getter=${getter}</arg>
<arg>safe_validator=${safe_validator}</arg>
<arg>initial_state=${state}</arg>
<doc>Pass only if consecutively 1 times in a row with 60 between attempts: ${getter} creates data and ${safe_validator} passes. Validator updates its state even if it reports failure. Always return validator state, status and message.</doc>
<status status="PASS" start="2026-04-18T03:27:01.675221" elapsed="3.736153"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:27:05.411586" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:27:05.411462" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-04-18T03:27:05.411444" elapsed="0.000208"/>
</if>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:27:05.413000" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:27:05.413081" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:27:05.412722" elapsed="0.000425">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:27:05.413251" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:27:05.413295" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:27:05.412329" elapsed="0.000990"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:27:05.413502" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:27:05.413393" elapsed="0.000184"/>
</branch>
<status status="PASS" start="2026-04-18T03:27:05.413374" elapsed="0.000232"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:27:05.414093" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:27:05.413833" elapsed="0.000291"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:27:05.417289" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:27:05.417364" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:27:05.414657" elapsed="0.002767">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:27:05.417540" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:27:05.417586" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:27:05.414302" elapsed="0.003307"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:27:05.417793" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-18T03:27:05.417684" elapsed="0.000169"/>
</branch>
<status status="PASS" start="2026-04-18T03:27:05.417665" elapsed="0.000212"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:27:05.418027" elapsed="0.000021"/>
</kw>
<arg>${result}</arg>
<arg>Not possible to succeed within the deadline.</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:27:05.411927" elapsed="0.006251"/>
</kw>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:27:05.419446" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:27:05.419519" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:27:05.419190" elapsed="0.000404">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:27:05.419693" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:27:05.419735" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:27:05.418851" elapsed="0.000906"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:27:05.419938" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:27:05.419831" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-04-18T03:27:05.419812" elapsed="0.000192"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:27:05.420432" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:27:05.420184" elapsed="0.000275"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:27:05.423375" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:27:05.423448" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:27:05.420979" elapsed="0.002528">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:27:05.423663" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:27:05.423707" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:27:05.420641" elapsed="0.003088"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:27:05.423912" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-18T03:27:05.423804" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-04-18T03:27:05.423785" elapsed="0.000210"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:27:05.424196" elapsed="0.000028"/>
</kw>
<arg>${result}</arg>
<arg>Getter failed</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:27:05.418459" elapsed="0.005900"/>
</kw>
<kw name="Sleep" owner="BuiltIn">
<msg time="2026-04-18T03:28:05.425374" level="INFO">Slept 1 minute.</msg>
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="PASS" start="2026-04-18T03:27:05.424515" elapsed="60.001445"/>
</kw>
<var name="${try}">4</var>
<status status="PASS" start="2026-04-18T03:27:01.673767" elapsed="63.752354"/>
</iter>
<iter>
<kw name="Getter_And_Safe_Stateful_Validator_Have_To_Succeed_Consecutively_By_Deadline" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:28:05.430134" level="INFO">${result} = No result yet.</msg>
<var>${result}</var>
<arg>No result yet.</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:28:05.429662" elapsed="0.000512"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:28:05.430853" level="INFO">${state} = 0</msg>
<var>${state}</var>
<arg>${initial_state}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:28:05.430406" elapsed="0.000486"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:28:05.431653" level="INFO">${sleeps} = 0</msg>
<var>${sleeps}</var>
<arg>${count} - 1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:28:05.431125" elapsed="0.000567"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:28:05.434101" level="INFO">${date_now} = 2026-04-18 03:28:05.434</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:28:05.433831" elapsed="0.000311"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:28:05.434973" level="INFO">${time_deadline} = 728.731</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:28:05.434382" elapsed="0.000634"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:28:05.435865" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:28:05.435254" elapsed="0.000649"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:28:05.436394" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:28:05.436012" elapsed="0.000466"/>
</branch>
<status status="PASS" start="2026-04-18T03:28:05.435981" elapsed="0.000533"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:28:05.432661" elapsed="0.003954"/>
</kw>
<msg time="2026-04-18T03:28:05.436762" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:28:05.436826" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:28:05.431951" elapsed="0.004907"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:28:05.437153" elapsed="0.000024"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:28:05.436974" elapsed="0.000255"/>
</branch>
<status status="PASS" start="2026-04-18T03:28:05.436948" elapsed="0.000313"/>
</if>
<for flavor="IN RANGE">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_As_Is" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:28:05.441032" level="INFO">${keyword} = Get_Ipv4_Topology_Count</msg>
<msg time="2026-04-18T03:28:05.441081" level="INFO">${args} = []</msg>
<msg time="2026-04-18T03:28:05.441127" level="INFO">${kwargs} = {'session': 'operational', 'topology': 'example-ipv4-topology'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:28:05.440648" elapsed="0.000503"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Get_Ipv4_Topology_Count" owner="PrefixCounting">
<kw name="Get_Ipv4_Topology" owner="PrefixCounting">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:28:08.630048" level="INFO">GET Request : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01agv6blx930rdupfsp7wkuo902.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-18T03:28:08.656185" level="INFO">GET Response : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Transfer-Encoding': 'chunked'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xmlns="urn:opendaylight:params:xml:ns:yang:odl-bgp-topology-types"/&gt;&lt;/topology-types&gt;&lt;node&gt;&lt;node-id&gt;192.0.2.1&lt;/node-id&gt;&lt;igp-node-attributes xmlns="urn:TBD:params:xml:ns:yang:nt:l3-unicast-igp-topology"&gt;&lt;prefix&gt;&lt;prefix&gt;8.20.15.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.65.76.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.222.18.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.234.69.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.59.125.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.205.46.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.69.249.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.243.186.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.86.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.138.152.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.201.33.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.107.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.133.25.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.19.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.45.49.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.194.22.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.226.161.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.211.127.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.100.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.254.101.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.205.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.60.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.234.208.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.228.239.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.27.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.177.154.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.201.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.148.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.160.202.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.48.218.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.52.93.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.93.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.182.185.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.34.217.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.116.158.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.236.169.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.223.35.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.103.82.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.7.2.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.131.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.40.95.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.244.132.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.28.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.253.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.83.39.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.4.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.193.28.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.36.83.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.143.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.73.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.128.217.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.135.39.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.6.81.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.78.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.54.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.250.105.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.110.78.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.182.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.4.223.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.49.100.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.5.205.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.165.63.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.36.184.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.214.36.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.171.128.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.208.52.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.113.57.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.3.37.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.237.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.160.220.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.198.13.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.174.151.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.48.34.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.21.1.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.1.30.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.108.237.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.89.117.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.218.102.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.24.70.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.41.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.48.122.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.51.175.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.79.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.25.67.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.153.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.219.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.88.115.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.129.239.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.117.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.204.169.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.10.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.139.169.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.79.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.53.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.31.83.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.117.152.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.46.66.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.86.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.3.214.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.74.90.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.197.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.54.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.41.3.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.97.95.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.179.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.188.172.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.219.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.124.44.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.187.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.197.228.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.87.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.133.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.78.124.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.149.209.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.33.23.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.243.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.189.185.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.80.206.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.150.251.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.208.98.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.125.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.213.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.71.27.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.234.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.109.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.112.121.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.8.69.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.201.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.203.154.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.73.19.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.169.175.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.15.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.4.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.75.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.68.155.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.16.40.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.231.11.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.85.57.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.191.139.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.191.228.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.75.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.3.166.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.32.247.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.242.134.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.184.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.164.222.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.35.248.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.209.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.60.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.129.2.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.88.147.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.222.193.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.58.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.61.198.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.32.165.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.120.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.251.232.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.111.147.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.203.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.161.229.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.68.153.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.105.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.252.41.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.2.231.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.240.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.146.121.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.92.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.151.79.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.10.14.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.95.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.155.232.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.32.13.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.92.229.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.102.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.118.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.83.215.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.38.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.110.203.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.240.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.116.31.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.238.174.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.235.83.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.4.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.122.151.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.21.216.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.146.154.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.199.188.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.194.94.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.153.168.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.255.64.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.22.16/28&lt;/pref... (set the log level to DEBUG or TRACE to see the full content) 
 </msg>
<msg time="2026-04-18T03:28:08.656785" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${PC_NW_TOPOLOGY}=${topology}?content=nonconfig</arg>
<arg>expected_status=anything</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-18T03:28:05.444154" elapsed="3.212694"/>
</kw>
<if>
<branch type="IF" condition="${response.status_code} != 200">
<kw name="Fail" owner="BuiltIn">
<arg>Get on ${topology} returned status code ${response.status_code} with message: ${response.text}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:28:08.659976" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:28:08.657080" elapsed="0.002981"/>
</branch>
<status status="PASS" start="2026-04-18T03:28:08.657009" elapsed="0.003101"/>
</if>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-18T03:28:08.660227" elapsed="0.000099"/>
</return>
<msg time="2026-04-18T03:28:08.667918" level="INFO">${topology} = &lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xml...</msg>
<var>${topology}</var>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>GET the example-ipv4-topology data, check status is 200, return the topology data.</doc>
<status status="PASS" start="2026-04-18T03:28:05.443142" elapsed="3.224899"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:28:08.762171" level="INFO">${prefix_count} = 0</msg>
<var>${prefix_count}</var>
<arg>len(re.findall('"prefix":"', '''${topology}'''))</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:28:08.668418" elapsed="0.093854"/>
</kw>
<return>
<value>${prefix_count}</value>
<status status="PASS" start="2026-04-18T03:28:08.762425" elapsed="0.000068"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Get topology. If not fail, return number of prefixes in the topology.</doc>
<status status="PASS" start="2026-04-18T03:28:05.441843" elapsed="3.320964"/>
</kw>
<msg time="2026-04-18T03:28:08.762922" level="INFO">${result} = 0</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:28:05.441323" elapsed="3.321633"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:28:08.763012" elapsed="0.000029"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure without affecting arguments.</doc>
<status status="PASS" start="2026-04-18T03:28:05.440215" elapsed="3.322926"/>
</kw>
<msg time="2026-04-18T03:28:08.763241" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:28:08.763286" level="INFO">${message} = 0</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:28:05.439376" elapsed="3.323936"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:28:08.763618" elapsed="0.042310"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:28:08.807208" elapsed="0.000045"/>
</return>
<status status="PASS" start="2026-04-18T03:28:08.807059" elapsed="0.000236"/>
</branch>
<status status="PASS" start="2026-04-18T03:28:08.807027" elapsed="0.000295"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:28:08.807514" elapsed="0.000060"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with 0.</doc>
<status status="PASS" start="2026-04-18T03:28:08.806550" elapsed="0.001119"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:28:08.807721" elapsed="0.000031"/>
</return>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:28:05.438786" elapsed="3.369071"/>
</kw>
<msg time="2026-04-18T03:28:08.807969" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:28:08.808038" level="INFO">${data} = 0</msg>
<var>${status}</var>
<var>${data}</var>
<arg>ScalarClosures.Run_Keyword_And_Collect_Garbage</arg>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:28:05.438121" elapsed="3.369951"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Getter failed: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:28:08.808333" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:28:08.808190" elapsed="0.000208"/>
</branch>
<status status="PASS" start="2026-04-18T03:28:08.808163" elapsed="0.000267"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:28:08.810101" level="INFO">${date_now} = 2026-04-18 03:28:08.810</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:28:08.809887" elapsed="0.000244"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:28:08.810738" level="INFO">${time_deadline} = 725.355</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:28:08.810307" elapsed="0.000458"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:28:08.811385" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:28:08.810937" elapsed="0.000482"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:28:08.811828" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:28:08.811500" elapsed="0.000386"/>
</branch>
<status status="PASS" start="2026-04-18T03:28:08.811479" elapsed="0.000432"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:28:08.809233" elapsed="0.002727"/>
</kw>
<msg time="2026-04-18T03:28:08.812062" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:28:08.812108" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:28:08.808658" elapsed="0.003473"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:28:08.812453" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:28:08.812340" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-04-18T03:28:08.812320" elapsed="0.000226"/>
</if>
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_After_Replacing_First_Two_Arguments" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:28:08.814771" level="INFO">${keyword} = WaitUtils.Excluding_Stability_Safe_Stateful_Validator_As_Keyword</msg>
<msg time="2026-04-18T03:28:08.814823" level="INFO">${args} = [0, 0]</msg>
<msg time="2026-04-18T03:28:08.814871" level="INFO">${kwargs} = {'excluded_value': '0'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:28:08.814399" elapsed="0.000502"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>0</arg>
<arg>${arg1}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:28:08.815097" elapsed="0.000257"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>1</arg>
<arg>${arg2}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:28:08.815562" elapsed="0.000247"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Excluding_Stability_Safe_Stateful_Validator_As_Keyword" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:28:08.817770" level="INFO">${new_state} = 0</msg>
<var>${new_state}</var>
<arg>${data}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:28:08.817316" elapsed="0.000482"/>
</kw>
<if>
<branch type="IF" condition="${data} == ${excluded_value}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Got the excluded value.</value>
<status status="PASS" start="2026-04-18T03:28:08.818051" elapsed="0.000030"/>
</return>
<status status="PASS" start="2026-04-18T03:28:08.817873" elapsed="0.000249"/>
</branch>
<status status="PASS" start="2026-04-18T03:28:08.817852" elapsed="0.000296"/>
</if>
<if>
<branch type="IF" condition="${data} != ${old_state}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Data value has changed.</value>
<status status="NOT RUN" start="2026-04-18T03:28:08.818239" elapsed="0.000210"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:28:08.818204" elapsed="0.000291"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:28:08.818188" elapsed="0.000330"/>
</if>
<return>
<value>${new_state}</value>
<value>PASS</value>
<value>Validated stable: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:28:08.818575" elapsed="0.000016"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Report failure if got the excluded value or if data value changed from last time. Useful to become validator.</doc>
<status status="PASS" start="2026-04-18T03:28:08.816856" elapsed="0.001853"/>
</kw>
<msg time="2026-04-18T03:28:08.818801" level="INFO">${result} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:28:08.816026" elapsed="0.002801"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:28:08.818877" elapsed="0.000028"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure with replaced first two positional arguments.</doc>
<status status="PASS" start="2026-04-18T03:28:08.813935" elapsed="0.005064"/>
</kw>
<msg time="2026-04-18T03:28:08.819093" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:28:08.819138" level="INFO">${message} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:28:08.813296" elapsed="0.005866"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:28:08.819331" elapsed="0.035740"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:28:08.856587" elapsed="0.000053"/>
</return>
<status status="PASS" start="2026-04-18T03:28:08.856372" elapsed="0.000321"/>
</branch>
<status status="PASS" start="2026-04-18T03:28:08.856337" elapsed="0.000394"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:28:08.856975" elapsed="0.000034"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with [0, 'FAIL', 'Got the excluded value.'].</doc>
<status status="PASS" start="2026-04-18T03:28:08.855753" elapsed="0.001344"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:28:08.857161" elapsed="0.000038"/>
</return>
<msg time="2026-04-18T03:28:08.857411" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:28:08.857478" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:28:08.857558" level="INFO">${result} = Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>ScalarClosures.Run_Closure_After_Replacing_First_Two_Arguments</arg>
<arg>${safe_validator}</arg>
<arg>${state}</arg>
<arg>${data}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:28:08.812789" elapsed="0.044804"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Validator failed: ${result}</value>
<status status="PASS" start="2026-04-18T03:28:08.857871" elapsed="0.000036"/>
</return>
<status status="PASS" start="2026-04-18T03:28:08.857714" elapsed="0.000249"/>
</branch>
<status status="PASS" start="2026-04-18T03:28:08.857688" elapsed="0.000311"/>
</if>
<if>
<branch type="IF" condition="${sleeps_left} &lt;= 0">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:28:08.858132" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:28:08.858080" elapsed="0.000118"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:28:08.858058" elapsed="0.000173"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-18T03:28:08.858505" elapsed="0.000036"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:28:08.858656" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:28:08.858621" elapsed="0.000158"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:28:08.858605" elapsed="0.000200"/>
</if>
<kw name="Sleep" owner="BuiltIn">
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-04-18T03:28:08.858948" elapsed="0.000021"/>
</kw>
<var name="${sleeps_left}">0</var>
<status status="PASS" start="2026-04-18T03:28:05.437903" elapsed="3.421100"/>
</iter>
<var>${sleeps_left}</var>
<value>${count}-1</value>
<value>-1</value>
<value>-1</value>
<status status="PASS" start="2026-04-18T03:28:05.437316" elapsed="3.421725"/>
</for>
<kw name="Fail" owner="BuiltIn">
<arg>Logic error, we should have returned before.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:28:08.859196" elapsed="0.000020"/>
</kw>
<msg time="2026-04-18T03:28:08.859420" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:28:08.859464" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:28:08.859504" level="INFO">${result} = Validator failed: Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>count=${count}</arg>
<arg>getter=${getter}</arg>
<arg>safe_validator=${safe_validator}</arg>
<arg>initial_state=${state}</arg>
<doc>Pass only if consecutively 1 times in a row with 60 between attempts: ${getter} creates data and ${safe_validator} passes. Validator updates its state even if it reports failure. Always return validator state, status and message.</doc>
<status status="PASS" start="2026-04-18T03:28:05.428375" elapsed="3.431172"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:28:08.859744" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:28:08.859637" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-04-18T03:28:08.859619" elapsed="0.000190"/>
</if>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:28:08.861162" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:28:08.861252" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:28:08.860876" elapsed="0.000448">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:28:08.861425" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:28:08.861468" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:28:08.860462" elapsed="0.001029"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:28:08.861690" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:28:08.861581" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-18T03:28:08.861562" elapsed="0.000195"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:28:08.862173" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:28:08.861911" elapsed="0.000290"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:28:08.865340" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:28:08.865415" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:28:08.862745" elapsed="0.002729">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:28:08.865598" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:28:08.865642" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:28:08.862389" elapsed="0.003276"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:28:08.865846" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-04-18T03:28:08.865739" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-04-18T03:28:08.865720" elapsed="0.000209"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:28:08.866080" elapsed="0.000022"/>
</kw>
<arg>${result}</arg>
<arg>Not possible to succeed within the deadline.</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:28:08.860083" elapsed="0.006149"/>
</kw>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:28:08.867555" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:28:08.867630" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:28:08.867284" elapsed="0.000403">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:28:08.867786" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:28:08.867828" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:28:08.866942" elapsed="0.000908"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:28:08.868031" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:28:08.867923" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-18T03:28:08.867905" elapsed="0.000192"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:28:08.868492" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:28:08.868246" elapsed="0.000272"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:28:08.871495" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:28:08.871586" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:28:08.869032" elapsed="0.002615">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:28:08.871790" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:28:08.871834" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:28:08.868699" elapsed="0.003157"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:28:08.872040" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-18T03:28:08.871931" elapsed="0.000169"/>
</branch>
<status status="PASS" start="2026-04-18T03:28:08.871912" elapsed="0.000212"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:28:08.872273" elapsed="0.000021"/>
</kw>
<arg>${result}</arg>
<arg>Getter failed</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:28:08.866560" elapsed="0.005864"/>
</kw>
<kw name="Sleep" owner="BuiltIn">
<msg time="2026-04-18T03:29:08.873434" level="INFO">Slept 1 minute.</msg>
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="PASS" start="2026-04-18T03:28:08.872595" elapsed="60.001188"/>
</kw>
<var name="${try}">5</var>
<status status="PASS" start="2026-04-18T03:28:05.426798" elapsed="63.447105"/>
</iter>
<iter>
<kw name="Getter_And_Safe_Stateful_Validator_Have_To_Succeed_Consecutively_By_Deadline" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:29:08.879027" level="INFO">${result} = No result yet.</msg>
<var>${result}</var>
<arg>No result yet.</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:29:08.878178" elapsed="0.000926"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:29:08.879839" level="INFO">${state} = 0</msg>
<var>${state}</var>
<arg>${initial_state}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:29:08.879375" elapsed="0.000504"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:29:08.880741" level="INFO">${sleeps} = 0</msg>
<var>${sleeps}</var>
<arg>${count} - 1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:29:08.880122" elapsed="0.000660"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:29:08.883294" level="INFO">${date_now} = 2026-04-18 03:29:08.883</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:29:08.883019" elapsed="0.000315"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:29:08.884166" level="INFO">${time_deadline} = 665.282</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:29:08.883592" elapsed="0.000615"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:29:08.885069" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:29:08.884458" elapsed="0.000650"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:29:08.885625" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:29:08.885224" elapsed="0.000486"/>
</branch>
<status status="PASS" start="2026-04-18T03:29:08.885190" elapsed="0.000560"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:29:08.881759" elapsed="0.004066"/>
</kw>
<msg time="2026-04-18T03:29:08.885974" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:29:08.886041" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:29:08.881039" elapsed="0.005035"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:29:08.886355" elapsed="0.000025"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:29:08.886194" elapsed="0.000239"/>
</branch>
<status status="PASS" start="2026-04-18T03:29:08.886168" elapsed="0.000298"/>
</if>
<for flavor="IN RANGE">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_As_Is" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:29:08.889844" level="INFO">${keyword} = Get_Ipv4_Topology_Count</msg>
<msg time="2026-04-18T03:29:08.889892" level="INFO">${args} = []</msg>
<msg time="2026-04-18T03:29:08.889940" level="INFO">${kwargs} = {'session': 'operational', 'topology': 'example-ipv4-topology'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:29:08.889442" elapsed="0.000521"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Get_Ipv4_Topology_Count" owner="PrefixCounting">
<kw name="Get_Ipv4_Topology" owner="PrefixCounting">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:29:11.949950" level="INFO">GET Request : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01agv6blx930rdupfsp7wkuo902.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-18T03:29:11.965095" level="INFO">GET Response : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Transfer-Encoding': 'chunked'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xmlns="urn:opendaylight:params:xml:ns:yang:odl-bgp-topology-types"/&gt;&lt;/topology-types&gt;&lt;node&gt;&lt;node-id&gt;192.0.2.1&lt;/node-id&gt;&lt;igp-node-attributes xmlns="urn:TBD:params:xml:ns:yang:nt:l3-unicast-igp-topology"&gt;&lt;prefix&gt;&lt;prefix&gt;8.20.15.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.65.76.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.222.18.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.234.69.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.59.125.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.205.46.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.69.249.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.243.186.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.86.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.138.152.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.201.33.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.107.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.133.25.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.19.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.45.49.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.194.22.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.226.161.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.211.127.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.100.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.254.101.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.205.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.60.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.234.208.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.228.239.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.27.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.177.154.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.201.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.148.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.160.202.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.48.218.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.52.93.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.93.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.182.185.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.34.217.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.116.158.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.236.169.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.223.35.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.103.82.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.7.2.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.131.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.40.95.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.244.132.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.28.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.253.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.83.39.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.4.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.193.28.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.36.83.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.143.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.73.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.128.217.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.135.39.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.6.81.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.78.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.54.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.250.105.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.110.78.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.182.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.4.223.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.49.100.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.5.205.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.165.63.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.36.184.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.214.36.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.171.128.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.208.52.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.113.57.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.3.37.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.237.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.160.220.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.198.13.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.174.151.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.48.34.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.21.1.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.1.30.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.108.237.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.89.117.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.218.102.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.24.70.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.41.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.48.122.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.51.175.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.79.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.25.67.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.153.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.219.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.88.115.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.129.239.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.117.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.204.169.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.10.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.139.169.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.79.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.53.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.31.83.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.117.152.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.46.66.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.86.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.3.214.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.74.90.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.197.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.54.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.41.3.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.97.95.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.179.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.188.172.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.219.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.124.44.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.187.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.197.228.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.87.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.133.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.78.124.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.149.209.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.33.23.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.243.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.189.185.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.80.206.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.150.251.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.208.98.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.125.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.213.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.71.27.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.234.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.109.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.112.121.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.8.69.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.201.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.203.154.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.73.19.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.169.175.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.15.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.4.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.75.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.68.155.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.16.40.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.231.11.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.85.57.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.191.139.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.191.228.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.75.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.3.166.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.32.247.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.242.134.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.184.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.164.222.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.35.248.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.209.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.60.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.129.2.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.88.147.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.222.193.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.58.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.61.198.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.32.165.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.120.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.251.232.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.111.147.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.203.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.161.229.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.68.153.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.105.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.252.41.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.2.231.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.240.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.146.121.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.92.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.151.79.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.10.14.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.95.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.155.232.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.32.13.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.92.229.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.102.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.118.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.83.215.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.38.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.110.203.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.240.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.116.31.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.238.174.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.235.83.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.4.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.122.151.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.21.216.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.146.154.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.199.188.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.194.94.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.153.168.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.255.64.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.22.16/28&lt;/pref... (set the log level to DEBUG or TRACE to see the full content) 
 </msg>
<msg time="2026-04-18T03:29:11.968528" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${PC_NW_TOPOLOGY}=${topology}?content=nonconfig</arg>
<arg>expected_status=anything</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-18T03:29:08.892910" elapsed="3.075692"/>
</kw>
<if>
<branch type="IF" condition="${response.status_code} != 200">
<kw name="Fail" owner="BuiltIn">
<arg>Get on ${topology} returned status code ${response.status_code} with message: ${response.text}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:29:11.971770" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:29:11.968948" elapsed="0.002907"/>
</branch>
<status status="PASS" start="2026-04-18T03:29:11.968870" elapsed="0.003035"/>
</if>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-18T03:29:11.972006" elapsed="0.000081"/>
</return>
<msg time="2026-04-18T03:29:11.986132" level="INFO">${topology} = &lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xml...</msg>
<var>${topology}</var>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>GET the example-ipv4-topology data, check status is 200, return the topology data.</doc>
<status status="PASS" start="2026-04-18T03:29:08.891929" elapsed="3.094324"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:29:12.090596" level="INFO">${prefix_count} = 0</msg>
<var>${prefix_count}</var>
<arg>len(re.findall('"prefix":"', '''${topology}'''))</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:29:11.986717" elapsed="0.103981"/>
</kw>
<return>
<value>${prefix_count}</value>
<status status="PASS" start="2026-04-18T03:29:12.090824" elapsed="0.000060"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Get topology. If not fail, return number of prefixes in the topology.</doc>
<status status="PASS" start="2026-04-18T03:29:08.890654" elapsed="3.200505"/>
</kw>
<msg time="2026-04-18T03:29:12.091253" level="INFO">${result} = 0</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:29:08.890133" elapsed="3.201145"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:29:12.091332" elapsed="0.000029"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure without affecting arguments.</doc>
<status status="PASS" start="2026-04-18T03:29:08.889074" elapsed="3.202384"/>
</kw>
<msg time="2026-04-18T03:29:12.091574" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:29:12.091621" level="INFO">${message} = 0</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:29:08.888521" elapsed="3.203125"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:29:12.091871" elapsed="0.030320"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:29:12.123295" elapsed="0.000049"/>
</return>
<status status="PASS" start="2026-04-18T03:29:12.123120" elapsed="0.000271"/>
</branch>
<status status="PASS" start="2026-04-18T03:29:12.123096" elapsed="0.000329"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:29:12.123676" elapsed="0.000027"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with 0.</doc>
<status status="PASS" start="2026-04-18T03:29:12.122691" elapsed="0.001080"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:29:12.123816" elapsed="0.000029"/>
</return>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:29:08.888077" elapsed="3.235869"/>
</kw>
<msg time="2026-04-18T03:29:12.124051" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:29:12.124116" level="INFO">${data} = 0</msg>
<var>${status}</var>
<var>${data}</var>
<arg>ScalarClosures.Run_Keyword_And_Collect_Garbage</arg>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:29:08.887441" elapsed="3.236710"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Getter failed: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:29:12.124356" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:29:12.124242" elapsed="0.000164"/>
</branch>
<status status="PASS" start="2026-04-18T03:29:12.124222" elapsed="0.000207"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:29:12.126044" level="INFO">${date_now} = 2026-04-18 03:29:12.126</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:29:12.125838" elapsed="0.000236"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:29:12.126708" level="INFO">${time_deadline} = 662.039</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:29:12.126236" elapsed="0.000501"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:29:12.127302" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:29:12.126905" elapsed="0.000424"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:29:12.127671" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:29:12.127400" elapsed="0.000327"/>
</branch>
<status status="PASS" start="2026-04-18T03:29:12.127381" elapsed="0.000370"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:29:12.125215" elapsed="0.002585"/>
</kw>
<msg time="2026-04-18T03:29:12.127900" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:29:12.127945" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:29:12.124643" elapsed="0.003325"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:29:12.128234" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:29:12.128123" elapsed="0.000162"/>
</branch>
<status status="PASS" start="2026-04-18T03:29:12.128104" elapsed="0.000203"/>
</if>
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_After_Replacing_First_Two_Arguments" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:29:12.130352" level="INFO">${keyword} = WaitUtils.Excluding_Stability_Safe_Stateful_Validator_As_Keyword</msg>
<msg time="2026-04-18T03:29:12.130402" level="INFO">${args} = [0, 0]</msg>
<msg time="2026-04-18T03:29:12.130450" level="INFO">${kwargs} = {'excluded_value': '0'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:29:12.130037" elapsed="0.000436"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>0</arg>
<arg>${arg1}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:29:12.130662" elapsed="0.000215"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>1</arg>
<arg>${arg2}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:29:12.131040" elapsed="0.000194"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Excluding_Stability_Safe_Stateful_Validator_As_Keyword" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:29:12.132985" level="INFO">${new_state} = 0</msg>
<var>${new_state}</var>
<arg>${data}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:29:12.132578" elapsed="0.000435"/>
</kw>
<if>
<branch type="IF" condition="${data} == ${excluded_value}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Got the excluded value.</value>
<status status="PASS" start="2026-04-18T03:29:12.133340" elapsed="0.000044"/>
</return>
<status status="PASS" start="2026-04-18T03:29:12.133088" elapsed="0.000343"/>
</branch>
<status status="PASS" start="2026-04-18T03:29:12.133067" elapsed="0.000391"/>
</if>
<if>
<branch type="IF" condition="${data} != ${old_state}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Data value has changed.</value>
<status status="NOT RUN" start="2026-04-18T03:29:12.133577" elapsed="0.000164"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:29:12.133519" elapsed="0.000261"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:29:12.133501" elapsed="0.000301"/>
</if>
<return>
<value>${new_state}</value>
<value>PASS</value>
<value>Validated stable: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:29:12.133836" elapsed="0.000014"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Report failure if got the excluded value or if data value changed from last time. Useful to become validator.</doc>
<status status="PASS" start="2026-04-18T03:29:12.132099" elapsed="0.001861"/>
</kw>
<msg time="2026-04-18T03:29:12.134046" level="INFO">${result} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:29:12.131401" elapsed="0.002670"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:29:12.134121" elapsed="0.000029"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure with replaced first two positional arguments.</doc>
<status status="PASS" start="2026-04-18T03:29:12.129635" elapsed="0.004608"/>
</kw>
<msg time="2026-04-18T03:29:12.134336" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:29:12.134382" level="INFO">${message} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:29:12.129025" elapsed="0.005381"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:29:12.134592" elapsed="0.025899"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:29:12.161486" elapsed="0.000036"/>
</return>
<status status="PASS" start="2026-04-18T03:29:12.161352" elapsed="0.000225"/>
</branch>
<status status="PASS" start="2026-04-18T03:29:12.161329" elapsed="0.000274"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:29:12.161769" elapsed="0.000023"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with [0, 'FAIL', 'Got the excluded value.'].</doc>
<status status="PASS" start="2026-04-18T03:29:12.160939" elapsed="0.000987"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:29:12.161971" elapsed="0.000027"/>
</return>
<msg time="2026-04-18T03:29:12.162143" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:29:12.162190" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:29:12.162229" level="INFO">${result} = Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>ScalarClosures.Run_Closure_After_Replacing_First_Two_Arguments</arg>
<arg>${safe_validator}</arg>
<arg>${state}</arg>
<arg>${data}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:29:12.128541" elapsed="0.033710"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Validator failed: ${result}</value>
<status status="PASS" start="2026-04-18T03:29:12.162439" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-04-18T03:29:12.162333" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-04-18T03:29:12.162315" elapsed="0.000210"/>
</if>
<if>
<branch type="IF" condition="${sleeps_left} &lt;= 0">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:29:12.162637" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:29:12.162600" elapsed="0.000083"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:29:12.162584" elapsed="0.000122"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-18T03:29:12.162865" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:29:12.163002" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:29:12.162966" elapsed="0.000157"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:29:12.162950" elapsed="0.000198"/>
</if>
<kw name="Sleep" owner="BuiltIn">
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-04-18T03:29:12.163292" elapsed="0.000022"/>
</kw>
<var name="${sleeps_left}">0</var>
<status status="PASS" start="2026-04-18T03:29:08.887213" elapsed="3.276135"/>
</iter>
<var>${sleeps_left}</var>
<value>${count}-1</value>
<value>-1</value>
<value>-1</value>
<status status="PASS" start="2026-04-18T03:29:08.886531" elapsed="3.276853"/>
</for>
<kw name="Fail" owner="BuiltIn">
<arg>Logic error, we should have returned before.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:29:12.163560" elapsed="0.000022"/>
</kw>
<msg time="2026-04-18T03:29:12.163787" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:29:12.163832" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:29:12.163872" level="INFO">${result} = Validator failed: Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>count=${count}</arg>
<arg>getter=${getter}</arg>
<arg>safe_validator=${safe_validator}</arg>
<arg>initial_state=${state}</arg>
<doc>Pass only if consecutively 1 times in a row with 60 between attempts: ${getter} creates data and ${safe_validator} passes. Validator updates its state even if it reports failure. Always return validator state, status and message.</doc>
<status status="PASS" start="2026-04-18T03:29:08.876115" elapsed="3.287781"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:29:12.164091" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:29:12.163984" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-18T03:29:12.163966" elapsed="0.000196"/>
</if>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:29:12.165533" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:29:12.165636" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:29:12.165246" elapsed="0.000461">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:29:12.165809" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:29:12.165851" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:29:12.164855" elapsed="0.001022"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:29:12.166076" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:29:12.165967" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-18T03:29:12.165948" elapsed="0.000194"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:29:12.166566" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:29:12.166292" elapsed="0.000303"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:29:12.169754" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:29:12.169833" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:29:12.167098" elapsed="0.002798">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:29:12.170050" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:29:12.170095" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:29:12.166761" elapsed="0.003357"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:29:12.170308" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-18T03:29:12.170197" elapsed="0.000173"/>
</branch>
<status status="PASS" start="2026-04-18T03:29:12.170176" elapsed="0.000218"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:29:12.170566" elapsed="0.000023"/>
</kw>
<arg>${result}</arg>
<arg>Not possible to succeed within the deadline.</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:29:12.164445" elapsed="0.006280"/>
</kw>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:29:12.172046" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:29:12.172120" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:29:12.171786" elapsed="0.000392">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:29:12.172275" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:29:12.172317" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:29:12.171414" elapsed="0.000926"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:29:12.172521" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:29:12.172413" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-04-18T03:29:12.172394" elapsed="0.000213"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:29:12.173011" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:29:12.172756" elapsed="0.000282"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:29:12.176008" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:29:12.176085" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:29:12.173538" elapsed="0.002606">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:29:12.176323" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:29:12.176366" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:29:12.173203" elapsed="0.003185"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:29:12.176596" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-18T03:29:12.176465" elapsed="0.000193"/>
</branch>
<status status="PASS" start="2026-04-18T03:29:12.176445" elapsed="0.000238"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:29:12.176835" elapsed="0.000021"/>
</kw>
<arg>${result}</arg>
<arg>Getter failed</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:29:12.171027" elapsed="0.005961"/>
</kw>
<kw name="Sleep" owner="BuiltIn">
<msg time="2026-04-18T03:30:12.178008" level="INFO">Slept 1 minute.</msg>
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="PASS" start="2026-04-18T03:29:12.177143" elapsed="60.001483"/>
</kw>
<var name="${try}">6</var>
<status status="PASS" start="2026-04-18T03:29:08.874406" elapsed="63.304382"/>
</iter>
<iter>
<kw name="Getter_And_Safe_Stateful_Validator_Have_To_Succeed_Consecutively_By_Deadline" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:30:12.183181" level="INFO">${result} = No result yet.</msg>
<var>${result}</var>
<arg>No result yet.</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:30:12.182730" elapsed="0.000489"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:30:12.183875" level="INFO">${state} = 0</msg>
<var>${state}</var>
<arg>${initial_state}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:30:12.183445" elapsed="0.000466"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:30:12.184651" level="INFO">${sleeps} = 0</msg>
<var>${sleeps}</var>
<arg>${count} - 1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:30:12.184135" elapsed="0.000553"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:30:12.187030" level="INFO">${date_now} = 2026-04-18 03:30:12.187</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:30:12.186790" elapsed="0.000278"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:30:12.187833" level="INFO">${time_deadline} = 601.978</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:30:12.187286" elapsed="0.000584"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:30:12.188660" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:30:12.188099" elapsed="0.000598"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:30:12.189164" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:30:12.188803" elapsed="0.000439"/>
</branch>
<status status="PASS" start="2026-04-18T03:30:12.188772" elapsed="0.000507"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:30:12.185563" elapsed="0.003787"/>
</kw>
<msg time="2026-04-18T03:30:12.189493" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:30:12.189582" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:30:12.184925" elapsed="0.004692"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:30:12.189933" elapsed="0.000024"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:30:12.189745" elapsed="0.000264"/>
</branch>
<status status="PASS" start="2026-04-18T03:30:12.189711" elapsed="0.000332"/>
</if>
<for flavor="IN RANGE">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_As_Is" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:30:12.193156" level="INFO">${keyword} = Get_Ipv4_Topology_Count</msg>
<msg time="2026-04-18T03:30:12.193205" level="INFO">${args} = []</msg>
<msg time="2026-04-18T03:30:12.193253" level="INFO">${kwargs} = {'session': 'operational', 'topology': 'example-ipv4-topology'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:30:12.192769" elapsed="0.000508"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Get_Ipv4_Topology_Count" owner="PrefixCounting">
<kw name="Get_Ipv4_Topology" owner="PrefixCounting">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:30:15.286088" level="INFO">GET Request : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01agv6blx930rdupfsp7wkuo902.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-18T03:30:15.297977" level="INFO">GET Response : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Transfer-Encoding': 'chunked'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xmlns="urn:opendaylight:params:xml:ns:yang:odl-bgp-topology-types"/&gt;&lt;/topology-types&gt;&lt;node&gt;&lt;node-id&gt;192.0.2.1&lt;/node-id&gt;&lt;igp-node-attributes xmlns="urn:TBD:params:xml:ns:yang:nt:l3-unicast-igp-topology"&gt;&lt;prefix&gt;&lt;prefix&gt;8.20.15.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.65.76.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.222.18.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.234.69.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.59.125.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.205.46.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.69.249.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.243.186.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.86.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.138.152.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.201.33.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.107.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.133.25.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.19.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.45.49.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.194.22.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.226.161.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.211.127.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.100.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.254.101.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.205.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.60.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.234.208.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.228.239.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.27.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.177.154.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.201.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.148.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.160.202.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.48.218.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.52.93.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.93.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.182.185.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.34.217.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.116.158.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.236.169.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.223.35.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.103.82.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.7.2.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.131.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.40.95.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.244.132.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.28.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.253.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.83.39.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.4.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.193.28.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.36.83.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.143.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.73.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.128.217.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.135.39.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.6.81.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.78.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.54.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.250.105.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.110.78.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.182.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.4.223.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.49.100.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.5.205.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.165.63.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.36.184.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.214.36.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.171.128.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.208.52.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.113.57.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.3.37.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.237.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.160.220.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.198.13.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.174.151.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.48.34.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.21.1.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.1.30.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.108.237.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.89.117.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.218.102.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.24.70.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.41.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.48.122.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.51.175.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.79.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.25.67.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.153.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.219.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.88.115.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.129.239.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.117.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.204.169.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.10.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.139.169.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.79.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.53.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.31.83.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.117.152.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.46.66.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.86.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.3.214.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.74.90.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.197.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.54.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.41.3.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.97.95.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.179.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.188.172.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.219.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.124.44.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.187.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.197.228.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.87.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.133.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.78.124.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.149.209.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.33.23.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.243.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.189.185.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.80.206.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.150.251.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.208.98.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.125.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.213.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.71.27.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.234.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.109.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.112.121.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.8.69.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.201.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.203.154.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.73.19.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.169.175.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.15.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.4.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.75.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.68.155.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.16.40.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.231.11.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.85.57.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.191.139.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.191.228.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.75.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.3.166.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.32.247.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.242.134.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.184.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.164.222.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.35.248.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.209.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.60.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.129.2.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.88.147.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.222.193.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.58.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.61.198.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.32.165.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.120.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.251.232.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.111.147.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.203.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.161.229.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.68.153.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.105.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.252.41.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.2.231.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.240.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.146.121.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.92.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.151.79.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.10.14.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.95.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.155.232.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.32.13.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.92.229.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.102.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.118.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.83.215.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.38.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.110.203.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.240.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.116.31.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.238.174.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.235.83.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.4.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.122.151.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.21.216.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.146.154.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.199.188.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.194.94.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.153.168.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.255.64.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.22.16/28&lt;/pref... (set the log level to DEBUG or TRACE to see the full content) 
 </msg>
<msg time="2026-04-18T03:30:15.298611" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${PC_NW_TOPOLOGY}=${topology}?content=nonconfig</arg>
<arg>expected_status=anything</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-18T03:30:12.196292" elapsed="3.102385"/>
</kw>
<if>
<branch type="IF" condition="${response.status_code} != 200">
<kw name="Fail" owner="BuiltIn">
<arg>Get on ${topology} returned status code ${response.status_code} with message: ${response.text}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:30:15.301850" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:30:15.298945" elapsed="0.002990"/>
</branch>
<status status="PASS" start="2026-04-18T03:30:15.298844" elapsed="0.003141"/>
</if>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-18T03:30:15.302236" elapsed="0.000083"/>
</return>
<msg time="2026-04-18T03:30:15.309936" level="INFO">${topology} = &lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xml...</msg>
<var>${topology}</var>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>GET the example-ipv4-topology data, check status is 200, return the topology data.</doc>
<status status="PASS" start="2026-04-18T03:30:12.195303" elapsed="3.114754"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:30:15.402694" level="INFO">${prefix_count} = 0</msg>
<var>${prefix_count}</var>
<arg>len(re.findall('"prefix":"', '''${topology}'''))</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:30:15.310889" elapsed="0.091914"/>
</kw>
<return>
<value>${prefix_count}</value>
<status status="PASS" start="2026-04-18T03:30:15.402943" elapsed="0.000061"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Get topology. If not fail, return number of prefixes in the topology.</doc>
<status status="PASS" start="2026-04-18T03:30:12.193980" elapsed="3.209337"/>
</kw>
<msg time="2026-04-18T03:30:15.403417" level="INFO">${result} = 0</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:30:12.193447" elapsed="3.209996"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:30:15.403497" elapsed="0.000034"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure without affecting arguments.</doc>
<status status="PASS" start="2026-04-18T03:30:12.192376" elapsed="3.211274"/>
</kw>
<msg time="2026-04-18T03:30:15.403753" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:30:15.403798" level="INFO">${message} = 0</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:30:12.191850" elapsed="3.211973"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:30:15.404050" elapsed="0.026718"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:30:15.431779" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-04-18T03:30:15.431643" elapsed="0.000204"/>
</branch>
<status status="PASS" start="2026-04-18T03:30:15.431619" elapsed="0.000254"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:30:15.432037" elapsed="0.000023"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with 0.</doc>
<status status="PASS" start="2026-04-18T03:30:15.431205" elapsed="0.000915"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:30:15.432164" elapsed="0.000027"/>
</return>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:30:12.191403" elapsed="3.240885"/>
</kw>
<msg time="2026-04-18T03:30:15.432386" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:30:15.432483" level="INFO">${data} = 0</msg>
<var>${status}</var>
<var>${data}</var>
<arg>ScalarClosures.Run_Keyword_And_Collect_Garbage</arg>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:30:12.190952" elapsed="3.241556"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Getter failed: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:30:15.432712" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:30:15.432601" elapsed="0.000161"/>
</branch>
<status status="PASS" start="2026-04-18T03:30:15.432582" elapsed="0.000203"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:30:15.434217" level="INFO">${date_now} = 2026-04-18 03:30:15.434</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:30:15.434048" elapsed="0.000196"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:30:15.434791" level="INFO">${time_deadline} = 598.731</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:30:15.434397" elapsed="0.000420"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:30:15.435372" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:30:15.434982" elapsed="0.000417"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:30:15.435739" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:30:15.435470" elapsed="0.000323"/>
</branch>
<status status="PASS" start="2026-04-18T03:30:15.435451" elapsed="0.000366"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:30:15.433433" elapsed="0.002432"/>
</kw>
<msg time="2026-04-18T03:30:15.435964" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:30:15.436008" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:30:15.432946" elapsed="0.003085"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:30:15.436330" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:30:15.436222" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-04-18T03:30:15.436202" elapsed="0.000201"/>
</if>
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_After_Replacing_First_Two_Arguments" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:30:15.438399" level="INFO">${keyword} = WaitUtils.Excluding_Stability_Safe_Stateful_Validator_As_Keyword</msg>
<msg time="2026-04-18T03:30:15.438447" level="INFO">${args} = [0, 0]</msg>
<msg time="2026-04-18T03:30:15.438493" level="INFO">${kwargs} = {'excluded_value': '0'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:30:15.438091" elapsed="0.000425"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>0</arg>
<arg>${arg1}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:30:15.438698" elapsed="0.000207"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>1</arg>
<arg>${arg2}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:30:15.439066" elapsed="0.000192"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Excluding_Stability_Safe_Stateful_Validator_As_Keyword" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:30:15.441150" level="INFO">${new_state} = 0</msg>
<var>${new_state}</var>
<arg>${data}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:30:15.440707" elapsed="0.000470"/>
</kw>
<if>
<branch type="IF" condition="${data} == ${excluded_value}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Got the excluded value.</value>
<status status="PASS" start="2026-04-18T03:30:15.441420" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-18T03:30:15.441248" elapsed="0.000239"/>
</branch>
<status status="PASS" start="2026-04-18T03:30:15.441229" elapsed="0.000283"/>
</if>
<if>
<branch type="IF" condition="${data} != ${old_state}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Data value has changed.</value>
<status status="NOT RUN" start="2026-04-18T03:30:15.441630" elapsed="0.000151"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:30:15.441589" elapsed="0.000231"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:30:15.441571" elapsed="0.000271"/>
</if>
<return>
<value>${new_state}</value>
<value>PASS</value>
<value>Validated stable: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:30:15.441875" elapsed="0.000014"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Report failure if got the excluded value or if data value changed from last time. Useful to become validator.</doc>
<status status="PASS" start="2026-04-18T03:30:15.440136" elapsed="0.001860"/>
</kw>
<msg time="2026-04-18T03:30:15.442080" level="INFO">${result} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:30:15.439423" elapsed="0.002683"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:30:15.442154" elapsed="0.000027"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure with replaced first two positional arguments.</doc>
<status status="PASS" start="2026-04-18T03:30:15.437696" elapsed="0.004576"/>
</kw>
<msg time="2026-04-18T03:30:15.442364" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:30:15.442408" level="INFO">${message} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:30:15.437134" elapsed="0.005297"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:30:15.442660" elapsed="0.024643"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:30:15.468319" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-04-18T03:30:15.468184" elapsed="0.000203"/>
</branch>
<status status="PASS" start="2026-04-18T03:30:15.468161" elapsed="0.000252"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:30:15.468595" elapsed="0.000024"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with [0, 'FAIL', 'Got the excluded value.'].</doc>
<status status="PASS" start="2026-04-18T03:30:15.467767" elapsed="0.000914"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:30:15.468725" elapsed="0.000029"/>
</return>
<msg time="2026-04-18T03:30:15.468966" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:30:15.469013" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:30:15.469053" level="INFO">${result} = Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>ScalarClosures.Run_Closure_After_Replacing_First_Two_Arguments</arg>
<arg>${safe_validator}</arg>
<arg>${state}</arg>
<arg>${data}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:30:15.436662" elapsed="0.032415"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Validator failed: ${result}</value>
<status status="PASS" start="2026-04-18T03:30:15.469268" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-04-18T03:30:15.469159" elapsed="0.000172"/>
</branch>
<status status="PASS" start="2026-04-18T03:30:15.469142" elapsed="0.000213"/>
</if>
<if>
<branch type="IF" condition="${sleeps_left} &lt;= 0">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:30:15.469445" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:30:15.469409" elapsed="0.000082"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:30:15.469393" elapsed="0.000119"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-18T03:30:15.469690" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:30:15.469825" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:30:15.469790" elapsed="0.000158"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:30:15.469774" elapsed="0.000200"/>
</if>
<kw name="Sleep" owner="BuiltIn">
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-04-18T03:30:15.470118" elapsed="0.000021"/>
</kw>
<var name="${sleeps_left}">0</var>
<status status="PASS" start="2026-04-18T03:30:12.190789" elapsed="3.279383"/>
</iter>
<var>${sleeps_left}</var>
<value>${count}-1</value>
<value>-1</value>
<value>-1</value>
<status status="PASS" start="2026-04-18T03:30:12.190186" elapsed="3.280023"/>
</for>
<kw name="Fail" owner="BuiltIn">
<arg>Logic error, we should have returned before.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:30:15.470367" elapsed="0.000020"/>
</kw>
<msg time="2026-04-18T03:30:15.470609" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:30:15.470655" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:30:15.470696" level="INFO">${result} = Validator failed: Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>count=${count}</arg>
<arg>getter=${getter}</arg>
<arg>safe_validator=${safe_validator}</arg>
<arg>initial_state=${state}</arg>
<doc>Pass only if consecutively 1 times in a row with 60 between attempts: ${getter} creates data and ${safe_validator} passes. Validator updates its state even if it reports failure. Always return validator state, status and message.</doc>
<status status="PASS" start="2026-04-18T03:30:12.180812" elapsed="3.289907"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:30:15.470915" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:30:15.470808" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-04-18T03:30:15.470790" elapsed="0.000191"/>
</if>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:30:15.472408" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:30:15.472501" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:30:15.472126" elapsed="0.000488">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:30:15.472726" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:30:15.472770" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:30:15.471728" elapsed="0.001066"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:30:15.473032" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:30:15.472918" elapsed="0.000160"/>
</branch>
<status status="PASS" start="2026-04-18T03:30:15.472898" elapsed="0.000202"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:30:15.473513" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:30:15.473253" elapsed="0.000319"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:30:15.477934" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:30:15.478011" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:30:15.474211" elapsed="0.003863">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:30:15.478180" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:30:15.478224" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:30:15.473746" elapsed="0.004501"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:30:15.478435" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-18T03:30:15.478324" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-04-18T03:30:15.478305" elapsed="0.000214"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:30:15.478693" elapsed="0.000022"/>
</kw>
<arg>${result}</arg>
<arg>Not possible to succeed within the deadline.</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:30:15.471254" elapsed="0.007613"/>
</kw>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:30:15.480163" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:30:15.480238" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:30:15.479903" elapsed="0.000393">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:30:15.480397" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:30:15.480439" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:30:15.479558" elapsed="0.000903"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:30:15.480667" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:30:15.480556" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-18T03:30:15.480517" elapsed="0.000218"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:30:15.481189" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:30:15.480935" elapsed="0.000281"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:30:15.484135" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:30:15.484208" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:30:15.481738" elapsed="0.002528">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:30:15.484418" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:30:15.484462" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:30:15.481383" elapsed="0.003101"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:30:15.484685" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-18T03:30:15.484576" elapsed="0.000169"/>
</branch>
<status status="PASS" start="2026-04-18T03:30:15.484556" elapsed="0.000214"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:30:15.484946" elapsed="0.000022"/>
</kw>
<arg>${result}</arg>
<arg>Getter failed</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:30:15.479154" elapsed="0.005945"/>
</kw>
<kw name="Sleep" owner="BuiltIn">
<msg time="2026-04-18T03:31:15.486046" level="INFO">Slept 1 minute.</msg>
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="PASS" start="2026-04-18T03:30:15.485253" elapsed="60.001394"/>
</kw>
<var name="${try}">7</var>
<status status="PASS" start="2026-04-18T03:30:12.179366" elapsed="63.307450"/>
</iter>
<iter>
<kw name="Getter_And_Safe_Stateful_Validator_Have_To_Succeed_Consecutively_By_Deadline" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:31:15.491084" level="INFO">${result} = No result yet.</msg>
<var>${result}</var>
<arg>No result yet.</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:31:15.490587" elapsed="0.000538"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:31:15.491803" level="INFO">${state} = 0</msg>
<var>${state}</var>
<arg>${initial_state}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:31:15.491359" elapsed="0.000484"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:31:15.492658" level="INFO">${sleeps} = 0</msg>
<var>${sleeps}</var>
<arg>${count} - 1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:31:15.492113" elapsed="0.000584"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:31:15.495149" level="INFO">${date_now} = 2026-04-18 03:31:15.495</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:31:15.494893" elapsed="0.000294"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:31:15.495978" level="INFO">${time_deadline} = 538.67</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:31:15.495411" elapsed="0.000606"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:31:15.496832" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:31:15.496253" elapsed="0.000618"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:31:15.497443" elapsed="0.000040"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:31:15.496982" elapsed="0.000555"/>
</branch>
<status status="PASS" start="2026-04-18T03:31:15.496950" elapsed="0.000656"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:31:15.493654" elapsed="0.004028"/>
</kw>
<msg time="2026-04-18T03:31:15.497829" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:31:15.497893" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:31:15.492942" elapsed="0.004984"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:31:15.498198" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:31:15.498041" elapsed="0.000229"/>
</branch>
<status status="PASS" start="2026-04-18T03:31:15.498015" elapsed="0.000286"/>
</if>
<for flavor="IN RANGE">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_As_Is" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:31:15.501548" level="INFO">${keyword} = Get_Ipv4_Topology_Count</msg>
<msg time="2026-04-18T03:31:15.501627" level="INFO">${args} = []</msg>
<msg time="2026-04-18T03:31:15.501675" level="INFO">${kwargs} = {'session': 'operational', 'topology': 'example-ipv4-topology'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:31:15.501055" elapsed="0.000643"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Get_Ipv4_Topology_Count" owner="PrefixCounting">
<kw name="Get_Ipv4_Topology" owner="PrefixCounting">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:31:22.043623" level="INFO">GET Request : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01agv6blx930rdupfsp7wkuo902.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-18T03:31:22.058473" level="INFO">GET Response : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Transfer-Encoding': 'chunked'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xmlns="urn:opendaylight:params:xml:ns:yang:odl-bgp-topology-types"/&gt;&lt;/topology-types&gt;&lt;node&gt;&lt;node-id&gt;192.0.2.1&lt;/node-id&gt;&lt;igp-node-attributes xmlns="urn:TBD:params:xml:ns:yang:nt:l3-unicast-igp-topology"&gt;&lt;prefix&gt;&lt;prefix&gt;8.20.15.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.65.76.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.222.18.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.234.69.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.59.125.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.205.46.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.69.249.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.243.186.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.86.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.138.152.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.201.33.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.107.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.133.25.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.19.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.45.49.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.194.22.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.226.161.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.211.127.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.100.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.254.101.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.205.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.60.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.234.208.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.228.239.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.27.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.177.154.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.201.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.148.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.160.202.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.48.218.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.52.93.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.93.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.182.185.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.34.217.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.116.158.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.236.169.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.223.35.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.103.82.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.7.2.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.131.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.40.95.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.244.132.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.28.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.253.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.83.39.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.4.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.193.28.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.36.83.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.143.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.73.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.128.217.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.135.39.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.6.81.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.78.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.54.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.250.105.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.110.78.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.182.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.4.223.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.49.100.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.5.205.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.165.63.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.36.184.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.214.36.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.171.128.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.208.52.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.113.57.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.3.37.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.237.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.160.220.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.198.13.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.174.151.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.48.34.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.21.1.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.1.30.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.108.237.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.89.117.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.218.102.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.24.70.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.41.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.48.122.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.51.175.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.79.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.25.67.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.153.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.219.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.88.115.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.129.239.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.117.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.204.169.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.10.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.139.169.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.79.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.53.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.31.83.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.117.152.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.46.66.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.86.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.3.214.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.74.90.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.197.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.54.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.41.3.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.97.95.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.179.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.188.172.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.219.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.124.44.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.187.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.197.228.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.87.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.133.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.78.124.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.149.209.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.33.23.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.243.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.189.185.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.80.206.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.150.251.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.208.98.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.125.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.213.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.71.27.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.234.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.109.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.112.121.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.8.69.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.201.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.203.154.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.73.19.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.169.175.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.15.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.4.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.75.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.68.155.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.16.40.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.231.11.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.85.57.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.191.139.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.191.228.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.75.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.3.166.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.32.247.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.242.134.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.184.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.164.222.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.35.248.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.209.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.60.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.129.2.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.88.147.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.222.193.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.58.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.61.198.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.32.165.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.120.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.251.232.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.111.147.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.203.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.161.229.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.68.153.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.105.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.252.41.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.2.231.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.240.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.146.121.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.92.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.151.79.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.10.14.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.95.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.155.232.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.32.13.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.92.229.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.102.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.118.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.83.215.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.38.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.110.203.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.240.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.116.31.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.238.174.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.235.83.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.4.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.122.151.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.21.216.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.146.154.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.199.188.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.194.94.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.153.168.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.255.64.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.22.16/28&lt;/pref... (set the log level to DEBUG or TRACE to see the full content) 
 </msg>
<msg time="2026-04-18T03:31:22.061986" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${PC_NW_TOPOLOGY}=${topology}?content=nonconfig</arg>
<arg>expected_status=anything</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-18T03:31:15.504979" elapsed="6.557070"/>
</kw>
<if>
<branch type="IF" condition="${response.status_code} != 200">
<kw name="Fail" owner="BuiltIn">
<arg>Get on ${topology} returned status code ${response.status_code} with message: ${response.text}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:31:22.065180" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:31:22.062279" elapsed="0.002985"/>
</branch>
<status status="PASS" start="2026-04-18T03:31:22.062206" elapsed="0.003107"/>
</if>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-18T03:31:22.065416" elapsed="0.000081"/>
</return>
<msg time="2026-04-18T03:31:22.079752" level="INFO">${topology} = &lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xml...</msg>
<var>${topology}</var>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>GET the example-ipv4-topology data, check status is 200, return the topology data.</doc>
<status status="PASS" start="2026-04-18T03:31:15.503842" elapsed="6.576034"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:31:22.183519" level="INFO">${prefix_count} = 0</msg>
<var>${prefix_count}</var>
<arg>len(re.findall('"prefix":"', '''${topology}'''))</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:31:22.080269" elapsed="0.103370"/>
</kw>
<return>
<value>${prefix_count}</value>
<status status="PASS" start="2026-04-18T03:31:22.183765" elapsed="0.000058"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Get topology. If not fail, return number of prefixes in the topology.</doc>
<status status="PASS" start="2026-04-18T03:31:15.502363" elapsed="6.681742"/>
</kw>
<msg time="2026-04-18T03:31:22.184202" level="INFO">${result} = 0</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:31:15.501872" elapsed="6.682357"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:31:22.184283" elapsed="0.000030"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure without affecting arguments.</doc>
<status status="PASS" start="2026-04-18T03:31:15.500593" elapsed="6.683819"/>
</kw>
<msg time="2026-04-18T03:31:22.184511" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:31:22.184576" level="INFO">${message} = 0</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:31:15.500019" elapsed="6.684583"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:31:22.184875" elapsed="0.028675"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:31:22.214581" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-04-18T03:31:22.214427" elapsed="0.000224"/>
</branch>
<status status="PASS" start="2026-04-18T03:31:22.214403" elapsed="0.000273"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:31:22.214844" elapsed="0.000023"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with 0.</doc>
<status status="PASS" start="2026-04-18T03:31:22.214010" elapsed="0.000919"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:31:22.214972" elapsed="0.000028"/>
</return>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:31:15.499465" elapsed="6.715632"/>
</kw>
<msg time="2026-04-18T03:31:22.215197" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:31:22.215244" level="INFO">${data} = 0</msg>
<var>${status}</var>
<var>${data}</var>
<arg>ScalarClosures.Run_Keyword_And_Collect_Garbage</arg>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:31:15.498967" elapsed="6.716301"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Getter failed: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:31:22.215453" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:31:22.215345" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-18T03:31:22.215327" elapsed="0.000198"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:31:22.216989" level="INFO">${date_now} = 2026-04-18 03:31:22.217</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:31:22.216820" elapsed="0.000197"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:31:22.217620" level="INFO">${time_deadline} = 531.948</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:31:22.217171" elapsed="0.000476"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:31:22.218207" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:31:22.217813" elapsed="0.000421"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:31:22.218572" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:31:22.218305" elapsed="0.000322"/>
</branch>
<status status="PASS" start="2026-04-18T03:31:22.218286" elapsed="0.000365"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:31:22.216197" elapsed="0.002501"/>
</kw>
<msg time="2026-04-18T03:31:22.218797" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:31:22.218842" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:31:22.215707" elapsed="0.003159"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:31:22.219127" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:31:22.219018" elapsed="0.000160"/>
</branch>
<status status="PASS" start="2026-04-18T03:31:22.218999" elapsed="0.000201"/>
</if>
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_After_Replacing_First_Two_Arguments" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:31:22.221188" level="INFO">${keyword} = WaitUtils.Excluding_Stability_Safe_Stateful_Validator_As_Keyword</msg>
<msg time="2026-04-18T03:31:22.221238" level="INFO">${args} = [0, 0]</msg>
<msg time="2026-04-18T03:31:22.221283" level="INFO">${kwargs} = {'excluded_value': '0'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:31:22.220880" elapsed="0.000426"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>0</arg>
<arg>${arg1}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:31:22.221469" elapsed="0.000246"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>1</arg>
<arg>${arg2}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:31:22.221877" elapsed="0.000193"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Excluding_Stability_Safe_Stateful_Validator_As_Keyword" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:31:22.223811" level="INFO">${new_state} = 0</msg>
<var>${new_state}</var>
<arg>${data}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:31:22.223379" elapsed="0.000460"/>
</kw>
<if>
<branch type="IF" condition="${data} == ${excluded_value}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Got the excluded value.</value>
<status status="PASS" start="2026-04-18T03:31:22.224085" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-18T03:31:22.223911" elapsed="0.000242"/>
</branch>
<status status="PASS" start="2026-04-18T03:31:22.223891" elapsed="0.000287"/>
</if>
<if>
<branch type="IF" condition="${data} != ${old_state}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Data value has changed.</value>
<status status="NOT RUN" start="2026-04-18T03:31:22.224271" elapsed="0.000154"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:31:22.224235" elapsed="0.000228"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:31:22.224219" elapsed="0.000267"/>
</if>
<return>
<value>${new_state}</value>
<value>PASS</value>
<value>Validated stable: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:31:22.224520" elapsed="0.000019"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Report failure if got the excluded value or if data value changed from last time. Useful to become validator.</doc>
<status status="PASS" start="2026-04-18T03:31:22.222932" elapsed="0.001740"/>
</kw>
<msg time="2026-04-18T03:31:22.224758" level="INFO">${result} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:31:22.222237" elapsed="0.002546"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:31:22.224832" elapsed="0.000028"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure with replaced first two positional arguments.</doc>
<status status="PASS" start="2026-04-18T03:31:22.220462" elapsed="0.004492"/>
</kw>
<msg time="2026-04-18T03:31:22.225046" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:31:22.225092" level="INFO">${message} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:31:22.219915" elapsed="0.005201"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:31:22.225283" elapsed="0.025077"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:31:22.251350" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-04-18T03:31:22.251217" elapsed="0.000200"/>
</branch>
<status status="PASS" start="2026-04-18T03:31:22.251194" elapsed="0.000248"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:31:22.251628" elapsed="0.000025"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with [0, 'FAIL', 'Got the excluded value.'].</doc>
<status status="PASS" start="2026-04-18T03:31:22.250813" elapsed="0.000901"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:31:22.251759" elapsed="0.000027"/>
</return>
<msg time="2026-04-18T03:31:22.251930" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:31:22.251976" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:31:22.252016" level="INFO">${result} = Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>ScalarClosures.Run_Closure_After_Replacing_First_Two_Arguments</arg>
<arg>${safe_validator}</arg>
<arg>${state}</arg>
<arg>${data}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:31:22.219428" elapsed="0.032611"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Validator failed: ${result}</value>
<status status="PASS" start="2026-04-18T03:31:22.252228" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-18T03:31:22.252121" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-04-18T03:31:22.252104" elapsed="0.000214"/>
</if>
<if>
<branch type="IF" condition="${sleeps_left} &lt;= 0">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:31:22.252410" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:31:22.252373" elapsed="0.000083"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:31:22.252357" elapsed="0.000121"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-18T03:31:22.252657" elapsed="0.000023"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:31:22.252794" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:31:22.252759" elapsed="0.000154"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:31:22.252742" elapsed="0.000197"/>
</if>
<kw name="Sleep" owner="BuiltIn">
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-04-18T03:31:22.253083" elapsed="0.000022"/>
</kw>
<var name="${sleeps_left}">0</var>
<status status="PASS" start="2026-04-18T03:31:15.498811" elapsed="6.754329"/>
</iter>
<var>${sleeps_left}</var>
<value>${count}-1</value>
<value>-1</value>
<value>-1</value>
<status status="PASS" start="2026-04-18T03:31:15.498356" elapsed="6.754820"/>
</for>
<kw name="Fail" owner="BuiltIn">
<arg>Logic error, we should have returned before.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:31:22.253331" elapsed="0.000021"/>
</kw>
<msg time="2026-04-18T03:31:22.253575" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:31:22.253621" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:31:22.253662" level="INFO">${result} = Validator failed: Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>count=${count}</arg>
<arg>getter=${getter}</arg>
<arg>safe_validator=${safe_validator}</arg>
<arg>initial_state=${state}</arg>
<doc>Pass only if consecutively 1 times in a row with 60 between attempts: ${getter} creates data and ${safe_validator} passes. Validator updates its state even if it reports failure. Always return validator state, status and message.</doc>
<status status="PASS" start="2026-04-18T03:31:15.489235" elapsed="6.764451"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:31:22.253882" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:31:22.253775" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-04-18T03:31:22.253757" elapsed="0.000191"/>
</if>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:31:22.255314" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:31:22.255398" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:31:22.255038" elapsed="0.000429">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:31:22.255585" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:31:22.255629" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:31:22.254653" elapsed="0.000998"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:31:22.255836" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:31:22.255727" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-18T03:31:22.255708" elapsed="0.000194"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:31:22.256308" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:31:22.256052" elapsed="0.000284"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:31:22.259483" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:31:22.259575" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:31:22.256860" elapsed="0.002775">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:31:22.259737" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:31:22.259780" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:31:22.256502" elapsed="0.003301"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:31:22.259986" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-04-18T03:31:22.259878" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-04-18T03:31:22.259859" elapsed="0.000210"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:31:22.260218" elapsed="0.000022"/>
</kw>
<arg>${result}</arg>
<arg>Not possible to succeed within the deadline.</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:31:22.254248" elapsed="0.006123"/>
</kw>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:31:22.261676" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:31:22.261749" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:31:22.261396" elapsed="0.000410">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:31:22.261904" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:31:22.261946" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:31:22.261053" elapsed="0.000916"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:31:22.262169" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:31:22.262043" elapsed="0.000172"/>
</branch>
<status status="PASS" start="2026-04-18T03:31:22.262024" elapsed="0.000214"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:31:22.262661" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:31:22.262389" elapsed="0.000299"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:31:22.265762" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:31:22.265837" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:31:22.263336" elapsed="0.002559">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:31:22.266036" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:31:22.266079" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:31:22.262855" elapsed="0.003247"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:31:22.266325" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-18T03:31:22.266178" elapsed="0.000207"/>
</branch>
<status status="PASS" start="2026-04-18T03:31:22.266158" elapsed="0.000251"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:31:22.266576" elapsed="0.000022"/>
</kw>
<arg>${result}</arg>
<arg>Getter failed</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:31:22.260673" elapsed="0.006058"/>
</kw>
<kw name="Sleep" owner="BuiltIn">
<msg time="2026-04-18T03:32:22.267503" level="INFO">Slept 1 minute.</msg>
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="PASS" start="2026-04-18T03:31:22.266887" elapsed="60.000949"/>
</kw>
<var name="${try}">8</var>
<status status="PASS" start="2026-04-18T03:31:15.487504" elapsed="66.780420"/>
</iter>
<iter>
<kw name="Getter_And_Safe_Stateful_Validator_Have_To_Succeed_Consecutively_By_Deadline" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:32:22.270445" level="INFO">${result} = No result yet.</msg>
<var>${result}</var>
<arg>No result yet.</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:32:22.269922" elapsed="0.000579"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:32:22.271457" level="INFO">${state} = 0</msg>
<var>${state}</var>
<arg>${initial_state}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:32:22.270862" elapsed="0.000650"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:32:22.272604" level="INFO">${sleeps} = 0</msg>
<var>${sleeps}</var>
<arg>${count} - 1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:32:22.271885" elapsed="0.000777"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:32:22.276920" level="INFO">${date_now} = 2026-04-18 03:32:22.277</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:32:22.276492" elapsed="0.000490"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:32:22.278179" level="INFO">${time_deadline} = 471.888</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:32:22.277341" elapsed="0.000870"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:32:22.279072" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:32:22.278459" elapsed="0.000655"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:32:22.279628" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:32:22.279237" elapsed="0.000458"/>
</branch>
<status status="PASS" start="2026-04-18T03:32:22.279199" elapsed="0.000525"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:32:22.274654" elapsed="0.005138"/>
</kw>
<msg time="2026-04-18T03:32:22.279949" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:32:22.280018" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:32:22.273032" elapsed="0.007023"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:32:22.280343" elapsed="0.000026"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:32:22.280181" elapsed="0.000242"/>
</branch>
<status status="PASS" start="2026-04-18T03:32:22.280152" elapsed="0.000302"/>
</if>
<for flavor="IN RANGE">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_As_Is" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:32:22.284491" level="INFO">${keyword} = Get_Ipv4_Topology_Count</msg>
<msg time="2026-04-18T03:32:22.284592" level="INFO">${args} = []</msg>
<msg time="2026-04-18T03:32:22.284663" level="INFO">${kwargs} = {'session': 'operational', 'topology': 'example-ipv4-topology'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:32:22.283955" elapsed="0.000745"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Get_Ipv4_Topology_Count" owner="PrefixCounting">
<kw name="Get_Ipv4_Topology" owner="PrefixCounting">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:32:25.614441" level="INFO">GET Request : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01agv6blx930rdupfsp7wkuo902.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-18T03:32:25.626051" level="INFO">GET Response : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Transfer-Encoding': 'chunked'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xmlns="urn:opendaylight:params:xml:ns:yang:odl-bgp-topology-types"/&gt;&lt;/topology-types&gt;&lt;node&gt;&lt;node-id&gt;192.0.2.1&lt;/node-id&gt;&lt;igp-node-attributes xmlns="urn:TBD:params:xml:ns:yang:nt:l3-unicast-igp-topology"&gt;&lt;prefix&gt;&lt;prefix&gt;8.20.15.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.65.76.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.222.18.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.234.69.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.59.125.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.205.46.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.69.249.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.243.186.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.86.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.138.152.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.201.33.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.107.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.133.25.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.19.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.45.49.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.194.22.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.226.161.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.211.127.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.100.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.254.101.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.205.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.60.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.234.208.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.228.239.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.27.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.177.154.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.201.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.148.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.160.202.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.48.218.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.52.93.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.93.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.182.185.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.34.217.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.116.158.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.236.169.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.223.35.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.103.82.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.7.2.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.131.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.40.95.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.244.132.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.28.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.253.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.83.39.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.4.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.193.28.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.36.83.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.143.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.73.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.128.217.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.135.39.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.6.81.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.78.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.54.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.250.105.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.110.78.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.182.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.4.223.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.49.100.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.5.205.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.165.63.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.36.184.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.214.36.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.171.128.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.208.52.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.113.57.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.3.37.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.237.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.160.220.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.198.13.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.174.151.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.48.34.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.21.1.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.1.30.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.108.237.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.89.117.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.218.102.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.24.70.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.41.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.48.122.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.51.175.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.79.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.25.67.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.153.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.219.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.88.115.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.129.239.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.117.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.204.169.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.10.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.139.169.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.79.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.53.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.31.83.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.117.152.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.46.66.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.86.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.3.214.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.74.90.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.197.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.54.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.41.3.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.97.95.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.179.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.188.172.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.219.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.124.44.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.187.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.197.228.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.87.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.133.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.78.124.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.149.209.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.33.23.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.243.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.189.185.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.80.206.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.150.251.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.208.98.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.125.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.213.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.71.27.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.234.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.109.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.112.121.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.8.69.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.201.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.203.154.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.73.19.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.169.175.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.15.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.4.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.75.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.68.155.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.16.40.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.231.11.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.85.57.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.191.139.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.191.228.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.75.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.3.166.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.32.247.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.242.134.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.184.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.164.222.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.35.248.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.209.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.60.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.129.2.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.88.147.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.222.193.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.58.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.61.198.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.32.165.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.120.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.251.232.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.111.147.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.203.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.161.229.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.68.153.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.105.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.252.41.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.2.231.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.240.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.146.121.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.92.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.151.79.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.10.14.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.95.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.155.232.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.32.13.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.92.229.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.102.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.118.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.83.215.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.38.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.110.203.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.240.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.116.31.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.238.174.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.235.83.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.4.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.122.151.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.21.216.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.146.154.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.199.188.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.194.94.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.153.168.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.255.64.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.22.16/28&lt;/pref... (set the log level to DEBUG or TRACE to see the full content) 
 </msg>
<msg time="2026-04-18T03:32:25.626678" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${PC_NW_TOPOLOGY}=${topology}?content=nonconfig</arg>
<arg>expected_status=anything</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-18T03:32:22.288504" elapsed="3.338236"/>
</kw>
<if>
<branch type="IF" condition="${response.status_code} != 200">
<kw name="Fail" owner="BuiltIn">
<arg>Get on ${topology} returned status code ${response.status_code} with message: ${response.text}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:32:25.629976" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:32:25.626980" elapsed="0.003086"/>
</branch>
<status status="PASS" start="2026-04-18T03:32:25.626909" elapsed="0.003207"/>
</if>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-18T03:32:25.630220" elapsed="0.000080"/>
</return>
<msg time="2026-04-18T03:32:25.637893" level="INFO">${topology} = &lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xml...</msg>
<var>${topology}</var>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>GET the example-ipv4-topology data, check status is 200, return the topology data.</doc>
<status status="PASS" start="2026-04-18T03:32:22.287286" elapsed="3.350726"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:32:25.731168" level="INFO">${prefix_count} = 0</msg>
<var>${prefix_count}</var>
<arg>len(re.findall('"prefix":"', '''${topology}'''))</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:32:25.638385" elapsed="0.092920"/>
</kw>
<return>
<value>${prefix_count}</value>
<status status="PASS" start="2026-04-18T03:32:25.731431" elapsed="0.000056"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Get topology. If not fail, return number of prefixes in the topology.</doc>
<status status="PASS" start="2026-04-18T03:32:22.285627" elapsed="3.446195"/>
</kw>
<msg time="2026-04-18T03:32:25.731918" level="INFO">${result} = 0</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:32:22.284939" elapsed="3.447005"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:32:25.731998" elapsed="0.000030"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure without affecting arguments.</doc>
<status status="PASS" start="2026-04-18T03:32:22.283412" elapsed="3.448714"/>
</kw>
<msg time="2026-04-18T03:32:25.732224" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:32:25.732269" level="INFO">${message} = 0</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:32:22.282664" elapsed="3.449629"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:32:25.732516" elapsed="0.025519"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:32:25.759031" elapsed="0.000036"/>
</return>
<status status="PASS" start="2026-04-18T03:32:25.758898" elapsed="0.000203"/>
</branch>
<status status="PASS" start="2026-04-18T03:32:25.758874" elapsed="0.000252"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:32:25.759295" elapsed="0.000023"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with 0.</doc>
<status status="PASS" start="2026-04-18T03:32:25.758467" elapsed="0.000917"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:32:25.759430" elapsed="0.000027"/>
</return>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:32:22.282040" elapsed="3.477533"/>
</kw>
<msg time="2026-04-18T03:32:25.759692" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:32:25.759738" level="INFO">${data} = 0</msg>
<var>${status}</var>
<var>${data}</var>
<arg>ScalarClosures.Run_Keyword_And_Collect_Garbage</arg>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:32:22.281329" elapsed="3.478432"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Getter failed: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:32:25.759947" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:32:25.759839" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-18T03:32:25.759820" elapsed="0.000198"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:32:25.761449" level="INFO">${date_now} = 2026-04-18 03:32:25.761</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:32:25.761277" elapsed="0.000199"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:32:25.762024" level="INFO">${time_deadline} = 468.404</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:32:25.761646" elapsed="0.000405"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:32:25.762631" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:32:25.762217" elapsed="0.000442"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:32:25.762982" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:32:25.762731" elapsed="0.000307"/>
</branch>
<status status="PASS" start="2026-04-18T03:32:25.762712" elapsed="0.000350"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:32:25.760686" elapsed="0.002424"/>
</kw>
<msg time="2026-04-18T03:32:25.763208" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:32:25.763253" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:32:25.760178" elapsed="0.003099"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:32:25.763557" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:32:25.763434" elapsed="0.000213"/>
</branch>
<status status="PASS" start="2026-04-18T03:32:25.763415" elapsed="0.000255"/>
</if>
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_After_Replacing_First_Two_Arguments" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:32:25.765664" level="INFO">${keyword} = WaitUtils.Excluding_Stability_Safe_Stateful_Validator_As_Keyword</msg>
<msg time="2026-04-18T03:32:25.765713" level="INFO">${args} = [0, 0]</msg>
<msg time="2026-04-18T03:32:25.765760" level="INFO">${kwargs} = {'excluded_value': '0'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:32:25.765337" elapsed="0.000446"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>0</arg>
<arg>${arg1}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:32:25.765948" elapsed="0.000208"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>1</arg>
<arg>${arg2}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:32:25.766316" elapsed="0.000193"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Excluding_Stability_Safe_Stateful_Validator_As_Keyword" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:32:25.768293" level="INFO">${new_state} = 0</msg>
<var>${new_state}</var>
<arg>${data}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:32:25.767890" elapsed="0.000431"/>
</kw>
<if>
<branch type="IF" condition="${data} == ${excluded_value}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Got the excluded value.</value>
<status status="PASS" start="2026-04-18T03:32:25.768583" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-18T03:32:25.768392" elapsed="0.000260"/>
</branch>
<status status="PASS" start="2026-04-18T03:32:25.768373" elapsed="0.000304"/>
</if>
<if>
<branch type="IF" condition="${data} != ${old_state}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Data value has changed.</value>
<status status="NOT RUN" start="2026-04-18T03:32:25.768767" elapsed="0.000158"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:32:25.768732" elapsed="0.000231"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:32:25.768716" elapsed="0.000270"/>
</if>
<return>
<value>${new_state}</value>
<value>PASS</value>
<value>Validated stable: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:32:25.769019" elapsed="0.000015"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Report failure if got the excluded value or if data value changed from last time. Useful to become validator.</doc>
<status status="PASS" start="2026-04-18T03:32:25.767382" elapsed="0.001759"/>
</kw>
<msg time="2026-04-18T03:32:25.769226" level="INFO">${result} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:32:25.766692" elapsed="0.002560"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:32:25.769301" elapsed="0.000027"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure with replaced first two positional arguments.</doc>
<status status="PASS" start="2026-04-18T03:32:25.764936" elapsed="0.004484"/>
</kw>
<msg time="2026-04-18T03:32:25.769513" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:32:25.769574" level="INFO">${message} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:32:25.764370" elapsed="0.005228"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:32:25.769767" elapsed="0.024133"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:32:25.794883" elapsed="0.000033"/>
</return>
<status status="PASS" start="2026-04-18T03:32:25.794751" elapsed="0.000200"/>
</branch>
<status status="PASS" start="2026-04-18T03:32:25.794730" elapsed="0.000246"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:32:25.795137" elapsed="0.000023"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with [0, 'FAIL', 'Got the excluded value.'].</doc>
<status status="PASS" start="2026-04-18T03:32:25.794329" elapsed="0.000891"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:32:25.795265" elapsed="0.000026"/>
</return>
<msg time="2026-04-18T03:32:25.795436" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:32:25.795483" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:32:25.795524" level="INFO">${result} = Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>ScalarClosures.Run_Closure_After_Replacing_First_Two_Arguments</arg>
<arg>${safe_validator}</arg>
<arg>${state}</arg>
<arg>${data}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:32:25.763899" elapsed="0.031670"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Validator failed: ${result}</value>
<status status="PASS" start="2026-04-18T03:32:25.795788" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-04-18T03:32:25.795680" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-04-18T03:32:25.795662" elapsed="0.000213"/>
</if>
<if>
<branch type="IF" condition="${sleeps_left} &lt;= 0">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:32:25.795965" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:32:25.795930" elapsed="0.000081"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:32:25.795914" elapsed="0.000119"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-18T03:32:25.796190" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:32:25.796325" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:32:25.796289" elapsed="0.000155"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:32:25.796273" elapsed="0.000197"/>
</if>
<kw name="Sleep" owner="BuiltIn">
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-04-18T03:32:25.796631" elapsed="0.000022"/>
</kw>
<var name="${sleeps_left}">0</var>
<status status="PASS" start="2026-04-18T03:32:22.281094" elapsed="3.515594"/>
</iter>
<var>${sleeps_left}</var>
<value>${count}-1</value>
<value>-1</value>
<value>-1</value>
<status status="PASS" start="2026-04-18T03:32:22.280517" elapsed="3.516207"/>
</for>
<kw name="Fail" owner="BuiltIn">
<arg>Logic error, we should have returned before.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:32:25.796880" elapsed="0.000021"/>
</kw>
<msg time="2026-04-18T03:32:25.797106" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:32:25.797152" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:32:25.797193" level="INFO">${result} = Validator failed: Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>count=${count}</arg>
<arg>getter=${getter}</arg>
<arg>safe_validator=${safe_validator}</arg>
<arg>initial_state=${state}</arg>
<doc>Pass only if consecutively 1 times in a row with 60 between attempts: ${getter} creates data and ${safe_validator} passes. Validator updates its state even if it reports failure. Always return validator state, status and message.</doc>
<status status="PASS" start="2026-04-18T03:32:22.268945" elapsed="3.528273"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:32:25.797418" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:32:25.797306" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-18T03:32:25.797288" elapsed="0.000196"/>
</if>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:32:25.798820" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:32:25.798901" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:32:25.798543" elapsed="0.000423">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:32:25.799068" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:32:25.799111" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:32:25.798152" elapsed="0.000982"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:32:25.799315" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:32:25.799208" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-04-18T03:32:25.799189" elapsed="0.000191"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:32:25.799837" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:32:25.799545" elapsed="0.000321"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:32:25.802964" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:32:25.803040" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:32:25.800369" elapsed="0.002730">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:32:25.803201" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:32:25.803243" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:32:25.800031" elapsed="0.003235"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:32:25.803447" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-18T03:32:25.803340" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-04-18T03:32:25.803321" elapsed="0.000224"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:32:25.803716" elapsed="0.000022"/>
</kw>
<arg>${result}</arg>
<arg>Not possible to succeed within the deadline.</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:32:25.797773" elapsed="0.006096"/>
</kw>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:32:25.805136" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:32:25.805208" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:32:25.804879" elapsed="0.000386">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:32:25.805362" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:32:25.805405" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:32:25.804523" elapsed="0.000904"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:32:25.805624" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:32:25.805500" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-04-18T03:32:25.805482" elapsed="0.000208"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:32:25.806082" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:32:25.805837" elapsed="0.000272"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:32:25.809094" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:32:25.809168" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:32:25.806622" elapsed="0.002604">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:32:25.809369" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:32:25.809416" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:32:25.806272" elapsed="0.003167"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:32:25.809639" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-18T03:32:25.809513" elapsed="0.000186"/>
</branch>
<status status="PASS" start="2026-04-18T03:32:25.809494" elapsed="0.000229"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:32:25.809872" elapsed="0.000021"/>
</kw>
<arg>${result}</arg>
<arg>Getter failed</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:32:25.804150" elapsed="0.005873"/>
</kw>
<kw name="Sleep" owner="BuiltIn">
<msg time="2026-04-18T03:33:25.810897" level="INFO">Slept 1 minute.</msg>
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="PASS" start="2026-04-18T03:32:25.810176" elapsed="60.001234"/>
</kw>
<var name="${try}">9</var>
<status status="PASS" start="2026-04-18T03:32:22.268236" elapsed="63.543437"/>
</iter>
<iter>
<kw name="Getter_And_Safe_Stateful_Validator_Have_To_Succeed_Consecutively_By_Deadline" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:33:25.816142" level="INFO">${result} = No result yet.</msg>
<var>${result}</var>
<arg>No result yet.</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:33:25.815372" elapsed="0.000836"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:33:25.817345" level="INFO">${state} = 0</msg>
<var>${state}</var>
<arg>${initial_state}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:33:25.816633" elapsed="0.000775"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:33:25.818675" level="INFO">${sleeps} = 0</msg>
<var>${sleeps}</var>
<arg>${count} - 1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:33:25.817829" elapsed="0.000909"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:33:25.822893" level="INFO">${date_now} = 2026-04-18 03:33:25.823</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:33:25.822440" elapsed="0.000519"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:33:25.824095" level="INFO">${time_deadline} = 408.342</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:33:25.823346" elapsed="0.000776"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:33:25.824699" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:33:25.824290" elapsed="0.000436"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:33:25.825066" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:33:25.824804" elapsed="0.000317"/>
</branch>
<status status="PASS" start="2026-04-18T03:33:25.824781" elapsed="0.000367"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:33:25.820299" elapsed="0.004899"/>
</kw>
<msg time="2026-04-18T03:33:25.825299" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:33:25.825344" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:33:25.819143" elapsed="0.006223"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:33:25.825573" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:33:25.825447" elapsed="0.000182"/>
</branch>
<status status="PASS" start="2026-04-18T03:33:25.825429" elapsed="0.000222"/>
</if>
<for flavor="IN RANGE">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_As_Is" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:33:25.828425" level="INFO">${keyword} = Get_Ipv4_Topology_Count</msg>
<msg time="2026-04-18T03:33:25.828473" level="INFO">${args} = []</msg>
<msg time="2026-04-18T03:33:25.828520" level="INFO">${kwargs} = {'session': 'operational', 'topology': 'example-ipv4-topology'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:33:25.828052" elapsed="0.000513"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Get_Ipv4_Topology_Count" owner="PrefixCounting">
<kw name="Get_Ipv4_Topology" owner="PrefixCounting">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:33:28.879954" level="INFO">GET Request : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01agv6blx930rdupfsp7wkuo902.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-18T03:33:28.893705" level="INFO">GET Response : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Transfer-Encoding': 'chunked'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xmlns="urn:opendaylight:params:xml:ns:yang:odl-bgp-topology-types"/&gt;&lt;/topology-types&gt;&lt;node&gt;&lt;node-id&gt;192.0.2.1&lt;/node-id&gt;&lt;igp-node-attributes xmlns="urn:TBD:params:xml:ns:yang:nt:l3-unicast-igp-topology"&gt;&lt;prefix&gt;&lt;prefix&gt;8.20.15.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.65.76.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.222.18.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.234.69.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.59.125.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.205.46.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.69.249.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.243.186.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.86.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.138.152.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.201.33.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.107.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.133.25.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.19.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.45.49.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.194.22.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.226.161.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.211.127.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.100.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.254.101.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.205.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.60.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.234.208.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.228.239.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.27.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.177.154.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.201.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.148.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.160.202.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.48.218.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.52.93.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.93.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.182.185.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.34.217.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.116.158.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.236.169.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.223.35.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.103.82.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.7.2.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.131.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.40.95.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.244.132.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.28.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.253.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.83.39.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.4.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.193.28.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.36.83.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.143.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.73.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.128.217.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.135.39.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.6.81.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.78.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.54.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.250.105.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.110.78.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.182.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.4.223.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.49.100.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.5.205.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.165.63.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.36.184.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.214.36.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.171.128.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.208.52.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.113.57.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.3.37.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.237.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.160.220.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.198.13.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.174.151.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.48.34.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.21.1.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.1.30.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.108.237.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.89.117.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.218.102.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.24.70.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.41.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.48.122.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.51.175.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.79.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.25.67.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.153.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.219.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.88.115.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.129.239.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.117.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.204.169.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.10.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.139.169.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.79.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.53.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.31.83.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.117.152.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.46.66.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.86.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.3.214.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.74.90.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.197.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.54.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.41.3.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.97.95.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.179.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.188.172.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.219.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.124.44.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.187.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.197.228.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.87.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.133.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.78.124.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.149.209.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.33.23.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.243.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.189.185.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.80.206.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.150.251.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.208.98.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.125.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.213.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.71.27.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.234.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.109.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.112.121.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.8.69.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.201.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.203.154.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.73.19.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.169.175.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.15.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.4.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.75.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.68.155.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.16.40.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.231.11.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.85.57.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.191.139.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.191.228.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.75.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.3.166.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.32.247.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.242.134.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.184.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.164.222.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.35.248.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.209.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.60.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.129.2.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.88.147.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.222.193.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.58.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.61.198.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.32.165.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.120.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.251.232.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.111.147.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.203.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.161.229.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.68.153.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.105.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.252.41.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.2.231.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.240.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.146.121.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.92.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.151.79.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.10.14.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.95.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.155.232.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.32.13.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.92.229.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.102.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.118.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.83.215.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.38.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.110.203.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.240.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.116.31.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.238.174.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.235.83.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.4.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.122.151.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.21.216.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.146.154.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.199.188.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.194.94.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.153.168.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.255.64.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.22.16/28&lt;/pref... (set the log level to DEBUG or TRACE to see the full content) 
 </msg>
<msg time="2026-04-18T03:33:28.897831" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${PC_NW_TOPOLOGY}=${topology}?content=nonconfig</arg>
<arg>expected_status=anything</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-18T03:33:25.831464" elapsed="3.066473"/>
</kw>
<if>
<branch type="IF" condition="${response.status_code} != 200">
<kw name="Fail" owner="BuiltIn">
<arg>Get on ${topology} returned status code ${response.status_code} with message: ${response.text}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:33:28.902516" elapsed="0.000069"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:33:28.898301" elapsed="0.004381"/>
</branch>
<status status="PASS" start="2026-04-18T03:33:28.898199" elapsed="0.004558"/>
</if>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-18T03:33:28.902912" elapsed="0.000116"/>
</return>
<msg time="2026-04-18T03:33:28.920438" level="INFO">${topology} = &lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xml...</msg>
<var>${topology}</var>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>GET the example-ipv4-topology data, check status is 200, return the topology data.</doc>
<status status="PASS" start="2026-04-18T03:33:25.830483" elapsed="3.090149"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:33:29.042307" level="INFO">${prefix_count} = 0</msg>
<var>${prefix_count}</var>
<arg>len(re.findall('"prefix":"', '''${topology}'''))</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:33:28.921099" elapsed="0.121361"/>
</kw>
<return>
<value>${prefix_count}</value>
<status status="PASS" start="2026-04-18T03:33:29.042673" elapsed="0.000076"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Get topology. If not fail, return number of prefixes in the topology.</doc>
<status status="PASS" start="2026-04-18T03:33:25.829213" elapsed="3.213963"/>
</kw>
<msg time="2026-04-18T03:33:29.043316" level="INFO">${result} = 0</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:33:25.828735" elapsed="3.214618"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:33:29.043427" elapsed="0.000041"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure without affecting arguments.</doc>
<status status="PASS" start="2026-04-18T03:33:25.827673" elapsed="3.215962"/>
</kw>
<msg time="2026-04-18T03:33:29.043779" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:33:29.043845" level="INFO">${message} = 0</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:33:25.827112" elapsed="3.216768"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:33:29.044208" elapsed="0.037494"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:33:29.082813" elapsed="0.000040"/>
</return>
<status status="PASS" start="2026-04-18T03:33:29.082674" elapsed="0.000213"/>
</branch>
<status status="PASS" start="2026-04-18T03:33:29.082647" elapsed="0.000267"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:33:29.083093" elapsed="0.000023"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with 0.</doc>
<status status="PASS" start="2026-04-18T03:33:29.082210" elapsed="0.000967"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:33:29.083222" elapsed="0.000028"/>
</return>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:33:25.826695" elapsed="3.256655"/>
</kw>
<msg time="2026-04-18T03:33:29.083452" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:33:29.083500" level="INFO">${data} = 0</msg>
<var>${status}</var>
<var>${data}</var>
<arg>ScalarClosures.Run_Keyword_And_Collect_Garbage</arg>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:33:25.826246" elapsed="3.257277"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Getter failed: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:33:29.083731" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:33:29.083621" elapsed="0.000160"/>
</branch>
<status status="PASS" start="2026-04-18T03:33:29.083602" elapsed="0.000201"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:33:29.085352" level="INFO">${date_now} = 2026-04-18 03:33:29.085</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:33:29.085146" elapsed="0.000234"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:33:29.085941" level="INFO">${time_deadline} = 405.08</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:33:29.085554" elapsed="0.000414"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:33:29.086525" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:33:29.086133" elapsed="0.000436"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:33:29.086892" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:33:29.086641" elapsed="0.000305"/>
</branch>
<status status="PASS" start="2026-04-18T03:33:29.086622" elapsed="0.000348"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:33:29.084481" elapsed="0.002537"/>
</kw>
<msg time="2026-04-18T03:33:29.087118" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:33:29.087163" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:33:29.083969" elapsed="0.003217"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:33:29.087492" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:33:29.087384" elapsed="0.000174"/>
</branch>
<status status="PASS" start="2026-04-18T03:33:29.087364" elapsed="0.000218"/>
</if>
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_After_Replacing_First_Two_Arguments" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:33:29.089695" level="INFO">${keyword} = WaitUtils.Excluding_Stability_Safe_Stateful_Validator_As_Keyword</msg>
<msg time="2026-04-18T03:33:29.089744" level="INFO">${args} = [0, 0]</msg>
<msg time="2026-04-18T03:33:29.089791" level="INFO">${kwargs} = {'excluded_value': '0'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:33:29.089359" elapsed="0.000455"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>0</arg>
<arg>${arg1}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:33:29.089979" elapsed="0.000215"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>1</arg>
<arg>${arg2}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:33:29.090354" elapsed="0.000206"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Excluding_Stability_Safe_Stateful_Validator_As_Keyword" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:33:29.092305" level="INFO">${new_state} = 0</msg>
<var>${new_state}</var>
<arg>${data}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:33:29.091896" elapsed="0.000436"/>
</kw>
<if>
<branch type="IF" condition="${data} == ${excluded_value}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Got the excluded value.</value>
<status status="PASS" start="2026-04-18T03:33:29.092611" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-04-18T03:33:29.092408" elapsed="0.000280"/>
</branch>
<status status="PASS" start="2026-04-18T03:33:29.092387" elapsed="0.000327"/>
</if>
<if>
<branch type="IF" condition="${data} != ${old_state}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Data value has changed.</value>
<status status="NOT RUN" start="2026-04-18T03:33:29.092804" elapsed="0.000191"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:33:29.092769" elapsed="0.000264"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:33:29.092754" elapsed="0.000302"/>
</if>
<return>
<value>${new_state}</value>
<value>PASS</value>
<value>Validated stable: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:33:29.093089" elapsed="0.000015"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Report failure if got the excluded value or if data value changed from last time. Useful to become validator.</doc>
<status status="PASS" start="2026-04-18T03:33:29.091420" elapsed="0.001794"/>
</kw>
<msg time="2026-04-18T03:33:29.093302" level="INFO">${result} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:33:29.090727" elapsed="0.002641"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:33:29.093419" elapsed="0.000027"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure with replaced first two positional arguments.</doc>
<status status="PASS" start="2026-04-18T03:33:29.088915" elapsed="0.004641"/>
</kw>
<msg time="2026-04-18T03:33:29.093652" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:33:29.093699" level="INFO">${message} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:33:29.088306" elapsed="0.005417"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:33:29.093895" elapsed="0.028235"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:33:29.123209" elapsed="0.000036"/>
</return>
<status status="PASS" start="2026-04-18T03:33:29.123071" elapsed="0.000208"/>
</branch>
<status status="PASS" start="2026-04-18T03:33:29.123045" elapsed="0.000261"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:33:29.123477" elapsed="0.000023"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with [0, 'FAIL', 'Got the excluded value.'].</doc>
<status status="PASS" start="2026-04-18T03:33:29.122609" elapsed="0.000976"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:33:29.123632" elapsed="0.000026"/>
</return>
<msg time="2026-04-18T03:33:29.123805" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:33:29.123852" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:33:29.123893" level="INFO">${result} = Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>ScalarClosures.Run_Closure_After_Replacing_First_Two_Arguments</arg>
<arg>${safe_validator}</arg>
<arg>${state}</arg>
<arg>${data}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:33:29.087814" elapsed="0.036103"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Validator failed: ${result}</value>
<status status="PASS" start="2026-04-18T03:33:29.124111" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-04-18T03:33:29.124002" elapsed="0.000172"/>
</branch>
<status status="PASS" start="2026-04-18T03:33:29.123983" elapsed="0.000217"/>
</if>
<if>
<branch type="IF" condition="${sleeps_left} &lt;= 0">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:33:29.124292" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:33:29.124255" elapsed="0.000083"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:33:29.124239" elapsed="0.000120"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-18T03:33:29.124518" elapsed="0.000037"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:33:29.124670" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:33:29.124635" elapsed="0.000159"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:33:29.124619" elapsed="0.000200"/>
</if>
<kw name="Sleep" owner="BuiltIn">
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-04-18T03:33:29.124963" elapsed="0.000021"/>
</kw>
<var name="${sleeps_left}">0</var>
<status status="PASS" start="2026-04-18T03:33:25.826094" elapsed="3.298925"/>
</iter>
<var>${sleeps_left}</var>
<value>${count}-1</value>
<value>-1</value>
<value>-1</value>
<status status="PASS" start="2026-04-18T03:33:25.825691" elapsed="3.299365"/>
</for>
<kw name="Fail" owner="BuiltIn">
<arg>Logic error, we should have returned before.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:33:29.125211" elapsed="0.000020"/>
</kw>
<msg time="2026-04-18T03:33:29.125468" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:33:29.125514" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:33:29.125572" level="INFO">${result} = Validator failed: Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>count=${count}</arg>
<arg>getter=${getter}</arg>
<arg>safe_validator=${safe_validator}</arg>
<arg>initial_state=${state}</arg>
<doc>Pass only if consecutively 1 times in a row with 60 between attempts: ${getter} creates data and ${safe_validator} passes. Validator updates its state even if it reports failure. Always return validator state, status and message.</doc>
<status status="PASS" start="2026-04-18T03:33:25.813631" elapsed="3.311967"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:33:29.125796" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:33:29.125689" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-04-18T03:33:29.125671" elapsed="0.000190"/>
</if>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:33:29.127266" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:33:29.127354" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:33:29.126959" elapsed="0.000465">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:33:29.127544" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:33:29.127592" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:33:29.126562" elapsed="0.001053"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:33:29.127802" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:33:29.127693" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-18T03:33:29.127673" elapsed="0.000197"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:33:29.128282" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:33:29.128024" elapsed="0.000286"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:33:29.131606" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:33:29.131683" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:33:29.128844" elapsed="0.002898">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:33:29.131847" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:33:29.131890" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:33:29.128477" elapsed="0.003436"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:33:29.132096" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-18T03:33:29.131988" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-04-18T03:33:29.131968" elapsed="0.000210"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:33:29.132665" elapsed="0.000067"/>
</kw>
<arg>${result}</arg>
<arg>Not possible to succeed within the deadline.</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:33:29.126142" elapsed="0.006990"/>
</kw>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:33:29.136236" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:33:29.136406" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:33:29.135637" elapsed="0.000934">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:33:29.136807" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:33:29.136905" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:33:29.134824" elapsed="0.002134"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:33:29.137423" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:33:29.137131" elapsed="0.000424"/>
</branch>
<status status="PASS" start="2026-04-18T03:33:29.137088" elapsed="0.000523"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:33:29.138523" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:33:29.137955" elapsed="0.000660"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:33:29.144194" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:33:29.144304" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:33:29.139784" elapsed="0.004607">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:33:29.144632" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:33:29.144698" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:33:29.138993" elapsed="0.005740"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:33:29.145012" elapsed="0.000038"/>
</return>
<status status="PASS" start="2026-04-18T03:33:29.144848" elapsed="0.000252"/>
</branch>
<status status="PASS" start="2026-04-18T03:33:29.144818" elapsed="0.000319"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:33:29.145385" elapsed="0.000034"/>
</kw>
<arg>${result}</arg>
<arg>Getter failed</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:33:29.133926" elapsed="0.011714"/>
</kw>
<kw name="Sleep" owner="BuiltIn">
<msg time="2026-04-18T03:34:29.146650" level="INFO">Slept 1 minute.</msg>
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="PASS" start="2026-04-18T03:33:29.145877" elapsed="60.001017"/>
</kw>
<var name="${try}">10</var>
<status status="PASS" start="2026-04-18T03:33:25.812237" elapsed="63.334768"/>
</iter>
<iter>
<kw name="Getter_And_Safe_Stateful_Validator_Have_To_Succeed_Consecutively_By_Deadline" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:34:29.151323" level="INFO">${result} = No result yet.</msg>
<var>${result}</var>
<arg>No result yet.</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:34:29.150655" elapsed="0.000729"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:34:29.152442" level="INFO">${state} = 0</msg>
<var>${state}</var>
<arg>${initial_state}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:34:29.151786" elapsed="0.000715"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:34:29.153710" level="INFO">${sleeps} = 0</msg>
<var>${sleeps}</var>
<arg>${count} - 1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:34:29.152902" elapsed="0.000867"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:34:29.156484" level="INFO">${date_now} = 2026-04-18 03:34:29.156</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:34:29.156306" elapsed="0.000205"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:34:29.157076" level="INFO">${time_deadline} = 345.009</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:34:29.156688" elapsed="0.000415"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:34:29.157686" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:34:29.157270" elapsed="0.000444"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:34:29.158055" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:34:29.157795" elapsed="0.000330"/>
</branch>
<status status="PASS" start="2026-04-18T03:34:29.157770" elapsed="0.000382"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:34:29.155344" elapsed="0.002861"/>
</kw>
<msg time="2026-04-18T03:34:29.158310" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:34:29.158355" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:34:29.154148" elapsed="0.004231"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:34:29.158620" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:34:29.158462" elapsed="0.000212"/>
</branch>
<status status="PASS" start="2026-04-18T03:34:29.158444" elapsed="0.000253"/>
</if>
<for flavor="IN RANGE">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_As_Is" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:34:29.161495" level="INFO">${keyword} = Get_Ipv4_Topology_Count</msg>
<msg time="2026-04-18T03:34:29.161569" level="INFO">${args} = []</msg>
<msg time="2026-04-18T03:34:29.161618" level="INFO">${kwargs} = {'session': 'operational', 'topology': 'example-ipv4-topology'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:34:29.161120" elapsed="0.000521"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Get_Ipv4_Topology_Count" owner="PrefixCounting">
<kw name="Get_Ipv4_Topology" owner="PrefixCounting">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:34:32.260235" level="INFO">GET Request : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01agv6blx930rdupfsp7wkuo902.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-18T03:34:32.271188" level="INFO">GET Response : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Transfer-Encoding': 'chunked'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xmlns="urn:opendaylight:params:xml:ns:yang:odl-bgp-topology-types"/&gt;&lt;/topology-types&gt;&lt;node&gt;&lt;node-id&gt;192.0.2.1&lt;/node-id&gt;&lt;igp-node-attributes xmlns="urn:TBD:params:xml:ns:yang:nt:l3-unicast-igp-topology"&gt;&lt;prefix&gt;&lt;prefix&gt;8.20.15.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.65.76.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.222.18.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.234.69.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.59.125.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.205.46.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.69.249.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.243.186.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.86.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.138.152.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.201.33.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.107.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.133.25.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.19.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.45.49.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.194.22.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.226.161.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.211.127.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.100.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.254.101.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.205.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.60.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.234.208.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.228.239.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.27.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.177.154.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.201.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.148.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.160.202.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.48.218.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.52.93.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.93.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.182.185.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.34.217.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.116.158.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.236.169.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.223.35.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.103.82.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.7.2.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.131.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.40.95.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.244.132.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.28.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.253.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.83.39.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.4.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.193.28.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.36.83.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.143.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.73.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.128.217.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.135.39.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.6.81.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.78.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.54.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.250.105.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.110.78.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.182.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.4.223.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.49.100.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.5.205.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.165.63.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.36.184.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.214.36.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.171.128.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.208.52.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.113.57.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.3.37.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.237.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.160.220.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.198.13.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.174.151.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.48.34.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.21.1.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.1.30.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.108.237.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.89.117.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.218.102.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.24.70.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.41.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.48.122.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.51.175.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.79.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.25.67.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.153.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.219.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.88.115.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.129.239.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.117.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.204.169.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.10.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.139.169.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.79.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.53.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.31.83.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.117.152.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.46.66.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.86.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.3.214.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.74.90.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.197.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.54.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.41.3.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.97.95.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.179.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.188.172.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.219.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.124.44.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.187.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.197.228.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.87.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.133.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.78.124.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.149.209.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.33.23.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.243.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.189.185.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.80.206.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.150.251.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.208.98.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.125.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.213.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.71.27.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.234.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.109.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.112.121.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.8.69.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.201.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.203.154.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.73.19.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.169.175.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.15.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.4.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.75.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.68.155.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.16.40.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.231.11.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.85.57.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.191.139.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.191.228.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.75.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.3.166.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.32.247.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.242.134.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.184.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.164.222.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.35.248.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.209.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.60.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.129.2.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.88.147.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.222.193.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.58.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.61.198.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.32.165.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.120.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.251.232.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.111.147.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.203.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.161.229.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.68.153.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.105.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.252.41.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.2.231.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.240.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.146.121.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.92.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.151.79.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.10.14.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.95.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.155.232.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.32.13.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.92.229.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.102.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.118.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.83.215.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.38.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.110.203.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.240.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.116.31.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.238.174.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.235.83.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.4.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.122.151.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.21.216.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.146.154.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.199.188.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.194.94.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.153.168.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.255.64.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.22.16/28&lt;/pref... (set the log level to DEBUG or TRACE to see the full content) 
 </msg>
<msg time="2026-04-18T03:34:32.271803" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${PC_NW_TOPOLOGY}=${topology}?content=nonconfig</arg>
<arg>expected_status=anything</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-18T03:34:29.164618" elapsed="3.107245"/>
</kw>
<if>
<branch type="IF" condition="${response.status_code} != 200">
<kw name="Fail" owner="BuiltIn">
<arg>Get on ${topology} returned status code ${response.status_code} with message: ${response.text}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:34:32.275057" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:34:32.272166" elapsed="0.002974"/>
</branch>
<status status="PASS" start="2026-04-18T03:34:32.272033" elapsed="0.003157"/>
</if>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-18T03:34:32.275293" elapsed="0.000081"/>
</return>
<msg time="2026-04-18T03:34:32.282900" level="INFO">${topology} = &lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xml...</msg>
<var>${topology}</var>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>GET the example-ipv4-topology data, check status is 200, return the topology data.</doc>
<status status="PASS" start="2026-04-18T03:34:29.163636" elapsed="3.119386"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:34:32.372687" level="INFO">${prefix_count} = 0</msg>
<var>${prefix_count}</var>
<arg>len(re.findall('"prefix":"', '''${topology}'''))</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:34:32.283639" elapsed="0.089165"/>
</kw>
<return>
<value>${prefix_count}</value>
<status status="PASS" start="2026-04-18T03:34:32.372934" elapsed="0.000064"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Get topology. If not fail, return number of prefixes in the topology.</doc>
<status status="PASS" start="2026-04-18T03:34:29.162307" elapsed="3.210999"/>
</kw>
<msg time="2026-04-18T03:34:32.373402" level="INFO">${result} = 0</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:34:29.161823" elapsed="3.211605"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:34:32.373481" elapsed="0.000030"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure without affecting arguments.</doc>
<status status="PASS" start="2026-04-18T03:34:29.160743" elapsed="3.212901"/>
</kw>
<msg time="2026-04-18T03:34:32.373746" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:34:32.373790" level="INFO">${message} = 0</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:34:29.160138" elapsed="3.213676"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:34:32.374055" elapsed="0.029857"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:34:32.404940" elapsed="0.000037"/>
</return>
<status status="PASS" start="2026-04-18T03:34:32.404802" elapsed="0.000209"/>
</branch>
<status status="PASS" start="2026-04-18T03:34:32.404778" elapsed="0.000259"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:34:32.405208" elapsed="0.000023"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with 0.</doc>
<status status="PASS" start="2026-04-18T03:34:32.404354" elapsed="0.000937"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:34:32.405393" elapsed="0.000029"/>
</return>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:34:29.159727" elapsed="3.245794"/>
</kw>
<msg time="2026-04-18T03:34:32.405644" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:34:32.405691" level="INFO">${data} = 0</msg>
<var>${status}</var>
<var>${data}</var>
<arg>ScalarClosures.Run_Keyword_And_Collect_Garbage</arg>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:34:29.159275" elapsed="3.246439"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Getter failed: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:34:32.405903" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:34:32.405796" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-18T03:34:32.405776" elapsed="0.000196"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:34:32.407410" level="INFO">${date_now} = 2026-04-18 03:34:32.407</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:34:32.407236" elapsed="0.000201"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:34:32.407987" level="INFO">${time_deadline} = 341.758</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:34:32.407609" elapsed="0.000405"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:34:32.408588" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:34:32.408177" elapsed="0.000438"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:34:32.408941" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:34:32.408687" elapsed="0.000308"/>
</branch>
<status status="PASS" start="2026-04-18T03:34:32.408668" elapsed="0.000351"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:34:32.406649" elapsed="0.002417"/>
</kw>
<msg time="2026-04-18T03:34:32.409163" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:34:32.409207" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:34:32.406134" elapsed="0.003096"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:34:32.409583" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:34:32.409457" elapsed="0.000177"/>
</branch>
<status status="PASS" start="2026-04-18T03:34:32.409437" elapsed="0.000219"/>
</if>
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_After_Replacing_First_Two_Arguments" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:34:32.411631" level="INFO">${keyword} = WaitUtils.Excluding_Stability_Safe_Stateful_Validator_As_Keyword</msg>
<msg time="2026-04-18T03:34:32.411679" level="INFO">${args} = [0, 0]</msg>
<msg time="2026-04-18T03:34:32.411724" level="INFO">${kwargs} = {'excluded_value': '0'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:34:32.411304" elapsed="0.000443"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>0</arg>
<arg>${arg1}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:34:32.411910" elapsed="0.000213"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>1</arg>
<arg>${arg2}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:34:32.412281" elapsed="0.000190"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Excluding_Stability_Safe_Stateful_Validator_As_Keyword" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:34:32.414252" level="INFO">${new_state} = 0</msg>
<var>${new_state}</var>
<arg>${data}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:34:32.413851" elapsed="0.000427"/>
</kw>
<if>
<branch type="IF" condition="${data} == ${excluded_value}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Got the excluded value.</value>
<status status="PASS" start="2026-04-18T03:34:32.414518" elapsed="0.000045"/>
</return>
<status status="PASS" start="2026-04-18T03:34:32.414348" elapsed="0.000257"/>
</branch>
<status status="PASS" start="2026-04-18T03:34:32.414329" elapsed="0.000300"/>
</if>
<if>
<branch type="IF" condition="${data} != ${old_state}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Data value has changed.</value>
<status status="NOT RUN" start="2026-04-18T03:34:32.414716" elapsed="0.000150"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:34:32.414683" elapsed="0.000221"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:34:32.414667" elapsed="0.000259"/>
</if>
<return>
<value>${new_state}</value>
<value>PASS</value>
<value>Validated stable: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:34:32.414960" elapsed="0.000014"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Report failure if got the excluded value or if data value changed from last time. Useful to become validator.</doc>
<status status="PASS" start="2026-04-18T03:34:32.413345" elapsed="0.001734"/>
</kw>
<msg time="2026-04-18T03:34:32.415163" level="INFO">${result} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:34:32.412653" elapsed="0.002535"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:34:32.415235" elapsed="0.000027"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure with replaced first two positional arguments.</doc>
<status status="PASS" start="2026-04-18T03:34:32.410910" elapsed="0.004443"/>
</kw>
<msg time="2026-04-18T03:34:32.415445" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:34:32.415489" level="INFO">${message} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:34:32.410351" elapsed="0.005161"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:34:32.415695" elapsed="0.026673"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:34:32.443378" elapsed="0.000037"/>
</return>
<status status="PASS" start="2026-04-18T03:34:32.443246" elapsed="0.000203"/>
</branch>
<status status="PASS" start="2026-04-18T03:34:32.443222" elapsed="0.000252"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:34:32.443659" elapsed="0.000024"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with [0, 'FAIL', 'Got the excluded value.'].</doc>
<status status="PASS" start="2026-04-18T03:34:32.442828" elapsed="0.000914"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:34:32.443786" elapsed="0.000026"/>
</return>
<msg time="2026-04-18T03:34:32.443956" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:34:32.444002" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:34:32.444042" level="INFO">${result} = Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>ScalarClosures.Run_Closure_After_Replacing_First_Two_Arguments</arg>
<arg>${safe_validator}</arg>
<arg>${state}</arg>
<arg>${data}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:34:32.409883" elapsed="0.034182"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Validator failed: ${result}</value>
<status status="PASS" start="2026-04-18T03:34:32.444250" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-04-18T03:34:32.444145" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-04-18T03:34:32.444127" elapsed="0.000208"/>
</if>
<if>
<branch type="IF" condition="${sleeps_left} &lt;= 0">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:34:32.444423" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:34:32.444388" elapsed="0.000079"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:34:32.444373" elapsed="0.000117"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-18T03:34:32.444665" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:34:32.444799" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:34:32.444764" elapsed="0.000158"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:34:32.444748" elapsed="0.000200"/>
</if>
<kw name="Sleep" owner="BuiltIn">
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-04-18T03:34:32.445088" elapsed="0.000021"/>
</kw>
<var name="${sleeps_left}">0</var>
<status status="PASS" start="2026-04-18T03:34:29.159123" elapsed="3.286020"/>
</iter>
<var>${sleeps_left}</var>
<value>${count}-1</value>
<value>-1</value>
<value>-1</value>
<status status="PASS" start="2026-04-18T03:34:29.158735" elapsed="3.286444"/>
</for>
<kw name="Fail" owner="BuiltIn">
<arg>Logic error, we should have returned before.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:34:32.445334" elapsed="0.000020"/>
</kw>
<msg time="2026-04-18T03:34:32.445574" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:34:32.445619" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:34:32.445659" level="INFO">${result} = Validator failed: Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>count=${count}</arg>
<arg>getter=${getter}</arg>
<arg>safe_validator=${safe_validator}</arg>
<arg>initial_state=${state}</arg>
<doc>Pass only if consecutively 1 times in a row with 60 between attempts: ${getter} creates data and ${safe_validator} passes. Validator updates its state even if it reports failure. Always return validator state, status and message.</doc>
<status status="PASS" start="2026-04-18T03:34:29.148851" elapsed="3.296832"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:34:32.445915" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:34:32.445809" elapsed="0.000149"/>
</branch>
<status status="PASS" start="2026-04-18T03:34:32.445790" elapsed="0.000190"/>
</if>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:34:32.447365" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:34:32.447451" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:34:32.447082" elapsed="0.000438">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:34:32.447642" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:34:32.447684" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:34:32.446683" elapsed="0.001024"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:34:32.447888" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:34:32.447780" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-18T03:34:32.447762" elapsed="0.000192"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:34:32.448358" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:34:32.448104" elapsed="0.000281"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:34:32.451522" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:34:32.451613" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:34:32.448904" elapsed="0.002768">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:34:32.451774" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:34:32.451817" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:34:32.448564" elapsed="0.003276"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:34:32.452020" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-18T03:34:32.451913" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-04-18T03:34:32.451894" elapsed="0.000209"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:34:32.452251" elapsed="0.000022"/>
</kw>
<arg>${result}</arg>
<arg>Not possible to succeed within the deadline.</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:34:32.446279" elapsed="0.006123"/>
</kw>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:34:32.453853" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:34:32.453928" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:34:32.453558" elapsed="0.000428">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:34:32.454085" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:34:32.454128" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:34:32.453188" elapsed="0.000962"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:34:32.454331" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:34:32.454223" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-18T03:34:32.454205" elapsed="0.000192"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:34:32.454906" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:34:32.454562" elapsed="0.000371"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:34:32.457828" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:34:32.457922" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:34:32.455432" elapsed="0.002547">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:34:32.458123" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:34:32.458166" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:34:32.455098" elapsed="0.003090"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:34:32.458369" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-18T03:34:32.458262" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-04-18T03:34:32.458243" elapsed="0.000210"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:34:32.458618" elapsed="0.000023"/>
</kw>
<arg>${result}</arg>
<arg>Getter failed</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:34:32.452747" elapsed="0.006025"/>
</kw>
<kw name="Sleep" owner="BuiltIn">
<msg time="2026-04-18T03:35:32.459776" level="INFO">Slept 1 minute.</msg>
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="PASS" start="2026-04-18T03:34:32.458926" elapsed="60.001453"/>
</kw>
<var name="${try}">11</var>
<status status="PASS" start="2026-04-18T03:34:29.147474" elapsed="63.313333"/>
</iter>
<iter>
<kw name="Getter_And_Safe_Stateful_Validator_Have_To_Succeed_Consecutively_By_Deadline" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:35:32.465740" level="INFO">${result} = No result yet.</msg>
<var>${result}</var>
<arg>No result yet.</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:35:32.465138" elapsed="0.000642"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:35:32.466462" level="INFO">${state} = 0</msg>
<var>${state}</var>
<arg>${initial_state}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:35:32.466031" elapsed="0.000470"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:35:32.467287" level="INFO">${sleeps} = 0</msg>
<var>${sleeps}</var>
<arg>${count} - 1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:35:32.466757" elapsed="0.000569"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:35:32.469759" level="INFO">${date_now} = 2026-04-18 03:35:32.470</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:35:32.469487" elapsed="0.000310"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:35:32.470583" level="INFO">${time_deadline} = 281.695</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:35:32.470018" elapsed="0.000604"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:35:32.471416" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:35:32.470859" elapsed="0.000595"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:35:32.471944" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:35:32.471584" elapsed="0.000440"/>
</branch>
<status status="PASS" start="2026-04-18T03:35:32.471551" elapsed="0.000508"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:35:32.468261" elapsed="0.003868"/>
</kw>
<msg time="2026-04-18T03:35:32.472272" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:35:32.472336" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:35:32.467588" elapsed="0.004781"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:35:32.472673" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:35:32.472481" elapsed="0.000265"/>
</branch>
<status status="PASS" start="2026-04-18T03:35:32.472456" elapsed="0.000320"/>
</if>
<for flavor="IN RANGE">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_As_Is" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:35:32.476686" level="INFO">${keyword} = Get_Ipv4_Topology_Count</msg>
<msg time="2026-04-18T03:35:32.476754" level="INFO">${args} = []</msg>
<msg time="2026-04-18T03:35:32.476820" level="INFO">${kwargs} = {'session': 'operational', 'topology': 'example-ipv4-topology'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:35:32.476097" elapsed="0.000757"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Get_Ipv4_Topology_Count" owner="PrefixCounting">
<kw name="Get_Ipv4_Topology" owner="PrefixCounting">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:35:35.569955" level="INFO">GET Request : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01agv6blx930rdupfsp7wkuo902.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-18T03:35:35.585123" level="INFO">GET Response : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Transfer-Encoding': 'chunked'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xmlns="urn:opendaylight:params:xml:ns:yang:odl-bgp-topology-types"/&gt;&lt;/topology-types&gt;&lt;node&gt;&lt;node-id&gt;192.0.2.1&lt;/node-id&gt;&lt;igp-node-attributes xmlns="urn:TBD:params:xml:ns:yang:nt:l3-unicast-igp-topology"&gt;&lt;prefix&gt;&lt;prefix&gt;8.20.15.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.65.76.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.222.18.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.234.69.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.59.125.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.205.46.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.69.249.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.243.186.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.86.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.138.152.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.201.33.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.107.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.133.25.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.19.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.45.49.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.194.22.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.226.161.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.211.127.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.100.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.254.101.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.205.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.60.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.234.208.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.228.239.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.27.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.177.154.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.201.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.148.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.160.202.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.48.218.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.52.93.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.93.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.182.185.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.34.217.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.116.158.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.236.169.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.223.35.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.103.82.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.7.2.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.131.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.40.95.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.244.132.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.28.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.253.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.83.39.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.4.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.193.28.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.36.83.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.143.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.73.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.128.217.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.135.39.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.6.81.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.78.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.54.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.250.105.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.110.78.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.182.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.4.223.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.49.100.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.5.205.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.165.63.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.36.184.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.214.36.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.171.128.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.208.52.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.113.57.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.3.37.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.237.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.160.220.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.198.13.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.174.151.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.48.34.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.21.1.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.1.30.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.108.237.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.89.117.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.218.102.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.24.70.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.41.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.48.122.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.51.175.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.79.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.25.67.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.153.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.219.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.88.115.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.129.239.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.117.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.204.169.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.10.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.139.169.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.79.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.53.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.31.83.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.117.152.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.46.66.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.86.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.3.214.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.74.90.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.197.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.54.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.41.3.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.97.95.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.179.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.188.172.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.219.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.124.44.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.187.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.197.228.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.87.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.133.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.78.124.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.149.209.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.33.23.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.243.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.189.185.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.80.206.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.150.251.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.208.98.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.125.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.213.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.71.27.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.234.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.109.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.112.121.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.8.69.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.201.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.203.154.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.73.19.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.169.175.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.15.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.4.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.75.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.68.155.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.16.40.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.231.11.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.85.57.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.191.139.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.191.228.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.75.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.3.166.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.32.247.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.242.134.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.184.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.164.222.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.35.248.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.209.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.60.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.129.2.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.88.147.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.222.193.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.58.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.61.198.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.32.165.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.120.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.251.232.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.111.147.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.203.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.161.229.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.68.153.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.105.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.252.41.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.2.231.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.240.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.146.121.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.92.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.151.79.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.10.14.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.95.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.155.232.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.32.13.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.92.229.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.102.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.118.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.83.215.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.38.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.110.203.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.240.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.116.31.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.238.174.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.235.83.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.4.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.122.151.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.21.216.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.146.154.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.199.188.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.194.94.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.153.168.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.255.64.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.22.16/28&lt;/pref... (set the log level to DEBUG or TRACE to see the full content) 
 </msg>
<msg time="2026-04-18T03:35:35.589057" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${PC_NW_TOPOLOGY}=${topology}?content=nonconfig</arg>
<arg>expected_status=anything</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-18T03:35:32.480066" elapsed="3.109093"/>
</kw>
<if>
<branch type="IF" condition="${response.status_code} != 200">
<kw name="Fail" owner="BuiltIn">
<arg>Get on ${topology} returned status code ${response.status_code} with message: ${response.text}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:35:35.593136" elapsed="0.000038"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:35:35.589470" elapsed="0.003774"/>
</branch>
<status status="PASS" start="2026-04-18T03:35:35.589371" elapsed="0.003924"/>
</if>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-18T03:35:35.593404" elapsed="0.000085"/>
</return>
<msg time="2026-04-18T03:35:35.607685" level="INFO">${topology} = &lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xml...</msg>
<var>${topology}</var>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>GET the example-ipv4-topology data, check status is 200, return the topology data.</doc>
<status status="PASS" start="2026-04-18T03:35:32.479076" elapsed="3.128737"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:35:35.705715" level="INFO">${prefix_count} = 0</msg>
<var>${prefix_count}</var>
<arg>len(re.findall('"prefix":"', '''${topology}'''))</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:35:35.608196" elapsed="0.097623"/>
</kw>
<return>
<value>${prefix_count}</value>
<status status="PASS" start="2026-04-18T03:35:35.705949" elapsed="0.000060"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Get topology. If not fail, return number of prefixes in the topology.</doc>
<status status="PASS" start="2026-04-18T03:35:32.477789" elapsed="3.228501"/>
</kw>
<msg time="2026-04-18T03:35:35.706387" level="INFO">${result} = 0</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:35:32.477092" elapsed="3.229321"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:35:35.706466" elapsed="0.000030"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure without affecting arguments.</doc>
<status status="PASS" start="2026-04-18T03:35:32.475586" elapsed="3.231024"/>
</kw>
<msg time="2026-04-18T03:35:35.706709" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:35:35.706755" level="INFO">${message} = 0</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:35:32.474833" elapsed="3.231946"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:35:35.707023" elapsed="0.026761"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:35:35.734912" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-04-18T03:35:35.734775" elapsed="0.000208"/>
</branch>
<status status="PASS" start="2026-04-18T03:35:35.734751" elapsed="0.000257"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:35:35.735176" elapsed="0.000023"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with 0.</doc>
<status status="PASS" start="2026-04-18T03:35:35.734323" elapsed="0.000937"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:35:35.735303" elapsed="0.000028"/>
</return>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:35:32.474225" elapsed="3.261203"/>
</kw>
<msg time="2026-04-18T03:35:35.735543" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:35:35.735593" level="INFO">${data} = 0</msg>
<var>${status}</var>
<var>${data}</var>
<arg>ScalarClosures.Run_Keyword_And_Collect_Garbage</arg>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:35:32.473618" elapsed="3.261999"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Getter failed: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:35:35.735802" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:35:35.735694" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-18T03:35:35.735676" elapsed="0.000197"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:35:35.737305" level="INFO">${date_now} = 2026-04-18 03:35:35.737</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:35:35.737135" elapsed="0.000198"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:35:35.737891" level="INFO">${time_deadline} = 278.428</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:35:35.737488" elapsed="0.000431"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:35:35.738481" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:35:35.738085" elapsed="0.000423"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:35:35.738850" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:35:35.738598" elapsed="0.000307"/>
</branch>
<status status="PASS" start="2026-04-18T03:35:35.738578" elapsed="0.000351"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:35:35.736518" elapsed="0.002459"/>
</kw>
<msg time="2026-04-18T03:35:35.739077" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:35:35.739122" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:35:35.736032" elapsed="0.003114"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:35:35.739410" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:35:35.739302" elapsed="0.000163"/>
</branch>
<status status="PASS" start="2026-04-18T03:35:35.739283" elapsed="0.000205"/>
</if>
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_After_Replacing_First_Two_Arguments" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:35:35.741459" level="INFO">${keyword} = WaitUtils.Excluding_Stability_Safe_Stateful_Validator_As_Keyword</msg>
<msg time="2026-04-18T03:35:35.741507" level="INFO">${args} = [0, 0]</msg>
<msg time="2026-04-18T03:35:35.741576" level="INFO">${kwargs} = {'excluded_value': '0'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:35:35.741152" elapsed="0.000449"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>0</arg>
<arg>${arg1}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:35:35.741765" elapsed="0.000207"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>1</arg>
<arg>${arg2}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:35:35.742132" elapsed="0.000192"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Excluding_Stability_Safe_Stateful_Validator_As_Keyword" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:35:35.744127" level="INFO">${new_state} = 0</msg>
<var>${new_state}</var>
<arg>${data}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:35:35.743729" elapsed="0.000425"/>
</kw>
<if>
<branch type="IF" condition="${data} == ${excluded_value}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Got the excluded value.</value>
<status status="PASS" start="2026-04-18T03:35:35.744396" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-18T03:35:35.744226" elapsed="0.000236"/>
</branch>
<status status="PASS" start="2026-04-18T03:35:35.744206" elapsed="0.000335"/>
</if>
<if>
<branch type="IF" condition="${data} != ${old_state}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Data value has changed.</value>
<status status="NOT RUN" start="2026-04-18T03:35:35.744634" elapsed="0.000149"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:35:35.744600" elapsed="0.000221"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:35:35.744584" elapsed="0.000260"/>
</if>
<return>
<value>${new_state}</value>
<value>PASS</value>
<value>Validated stable: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:35:35.744877" elapsed="0.000015"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Report failure if got the excluded value or if data value changed from last time. Useful to become validator.</doc>
<status status="PASS" start="2026-04-18T03:35:35.743256" elapsed="0.001743"/>
</kw>
<msg time="2026-04-18T03:35:35.745085" level="INFO">${result} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:35:35.742488" elapsed="0.002622"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:35:35.745159" elapsed="0.000027"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure with replaced first two positional arguments.</doc>
<status status="PASS" start="2026-04-18T03:35:35.740754" elapsed="0.004523"/>
</kw>
<msg time="2026-04-18T03:35:35.745368" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:35:35.745443" level="INFO">${message} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:35:35.740195" elapsed="0.005273"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:35:35.745657" elapsed="0.024008"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:35:35.770661" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-04-18T03:35:35.770508" elapsed="0.000223"/>
</branch>
<status status="PASS" start="2026-04-18T03:35:35.770484" elapsed="0.000271"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:35:35.770920" elapsed="0.000023"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with [0, 'FAIL', 'Got the excluded value.'].</doc>
<status status="PASS" start="2026-04-18T03:35:35.770100" elapsed="0.000903"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:35:35.771047" elapsed="0.000026"/>
</return>
<msg time="2026-04-18T03:35:35.771217" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:35:35.771263" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:35:35.771303" level="INFO">${result} = Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>ScalarClosures.Run_Closure_After_Replacing_First_Two_Arguments</arg>
<arg>${safe_validator}</arg>
<arg>${state}</arg>
<arg>${data}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:35:35.739731" elapsed="0.031594"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Validator failed: ${result}</value>
<status status="PASS" start="2026-04-18T03:35:35.771511" elapsed="0.000040"/>
</return>
<status status="PASS" start="2026-04-18T03:35:35.771406" elapsed="0.000185"/>
</branch>
<status status="PASS" start="2026-04-18T03:35:35.771389" elapsed="0.000226"/>
</if>
<if>
<branch type="IF" condition="${sleeps_left} &lt;= 0">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:35:35.771706" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:35:35.771670" elapsed="0.000082"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:35:35.771654" elapsed="0.000121"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-18T03:35:35.771932" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:35:35.772067" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:35:35.772032" elapsed="0.000156"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:35:35.772016" elapsed="0.000197"/>
</if>
<kw name="Sleep" owner="BuiltIn">
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-04-18T03:35:35.772370" elapsed="0.000022"/>
</kw>
<var name="${sleeps_left}">0</var>
<status status="PASS" start="2026-04-18T03:35:32.473384" elapsed="3.299042"/>
</iter>
<var>${sleeps_left}</var>
<value>${count}-1</value>
<value>-1</value>
<value>-1</value>
<status status="PASS" start="2026-04-18T03:35:32.472833" elapsed="3.299628"/>
</for>
<kw name="Fail" owner="BuiltIn">
<arg>Logic error, we should have returned before.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:35:35.772639" elapsed="0.000021"/>
</kw>
<msg time="2026-04-18T03:35:35.772864" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:35:35.772908" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:35:35.772948" level="INFO">${result} = Validator failed: Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>count=${count}</arg>
<arg>getter=${getter}</arg>
<arg>safe_validator=${safe_validator}</arg>
<arg>initial_state=${state}</arg>
<doc>Pass only if consecutively 1 times in a row with 60 between attempts: ${getter} creates data and ${safe_validator} passes. Validator updates its state even if it reports failure. Always return validator state, status and message.</doc>
<status status="PASS" start="2026-04-18T03:35:32.463077" elapsed="3.309894"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:35:35.773163" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:35:35.773057" elapsed="0.000149"/>
</branch>
<status status="PASS" start="2026-04-18T03:35:35.773040" elapsed="0.000188"/>
</if>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:35:35.774584" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:35:35.774668" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:35:35.774284" elapsed="0.000454">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:35:35.774840" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:35:35.774882" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:35:35.773903" elapsed="0.001002"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:35:35.775086" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:35:35.774978" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-18T03:35:35.774960" elapsed="0.000193"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:35:35.775573" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:35:35.775302" elapsed="0.000300"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:35:35.778691" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:35:35.778765" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:35:35.776104" elapsed="0.002720">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:35:35.778925" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:35:35.778968" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:35:35.775765" elapsed="0.003226"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:35:35.779174" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-18T03:35:35.779065" elapsed="0.000169"/>
</branch>
<status status="PASS" start="2026-04-18T03:35:35.779046" elapsed="0.000212"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:35:35.779406" elapsed="0.000021"/>
</kw>
<arg>${result}</arg>
<arg>Not possible to succeed within the deadline.</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:35:35.773499" elapsed="0.006076"/>
</kw>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:35:35.780914" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:35:35.780988" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:35:35.780654" elapsed="0.000393">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:35:35.781145" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:35:35.781187" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:35:35.780288" elapsed="0.000921"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:35:35.781438" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:35:35.781325" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-04-18T03:35:35.781265" elapsed="0.000242"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:35:35.781924" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:35:35.781674" elapsed="0.000277"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:35:35.785008" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:35:35.785083" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:35:35.782454" elapsed="0.002687">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:35:35.785299" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:35:35.785342" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:35:35.782117" elapsed="0.003248"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:35:35.785562" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-18T03:35:35.785439" elapsed="0.000185"/>
</branch>
<status status="PASS" start="2026-04-18T03:35:35.785420" elapsed="0.000228"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:35:35.785795" elapsed="0.000022"/>
</kw>
<arg>${result}</arg>
<arg>Getter failed</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:35:35.779857" elapsed="0.006091"/>
</kw>
<kw name="Sleep" owner="BuiltIn">
<msg time="2026-04-18T03:36:35.786653" level="INFO">Slept 1 minute.</msg>
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="PASS" start="2026-04-18T03:35:35.786102" elapsed="60.000784"/>
</kw>
<var name="${try}">12</var>
<status status="PASS" start="2026-04-18T03:35:32.461490" elapsed="63.325509"/>
</iter>
<iter>
<kw name="Getter_And_Safe_Stateful_Validator_Have_To_Succeed_Consecutively_By_Deadline" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:36:35.791813" level="INFO">${result} = No result yet.</msg>
<var>${result}</var>
<arg>No result yet.</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:36:35.791075" elapsed="0.000804"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:36:35.793023" level="INFO">${state} = 0</msg>
<var>${state}</var>
<arg>${initial_state}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:36:35.792272" elapsed="0.000813"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:36:35.794242" level="INFO">${sleeps} = 0</msg>
<var>${sleeps}</var>
<arg>${count} - 1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:36:35.793595" elapsed="0.000684"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:36:35.796620" level="INFO">${date_now} = 2026-04-18 03:36:35.796</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:36:35.796301" elapsed="0.000363"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:36:35.797445" level="INFO">${time_deadline} = 218.369</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:36:35.796892" elapsed="0.000597"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:36:35.798287" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:36:35.797743" elapsed="0.000582"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:36:35.798806" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:36:35.798431" elapsed="0.000452"/>
</branch>
<status status="PASS" start="2026-04-18T03:36:35.798400" elapsed="0.000519"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:36:35.795166" elapsed="0.003824"/>
</kw>
<msg time="2026-04-18T03:36:35.799130" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:36:35.799191" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:36:35.794515" elapsed="0.004707"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:36:35.799483" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:36:35.799334" elapsed="0.000242"/>
</branch>
<status status="PASS" start="2026-04-18T03:36:35.799309" elapsed="0.000299"/>
</if>
<for flavor="IN RANGE">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_As_Is" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:36:35.803443" level="INFO">${keyword} = Get_Ipv4_Topology_Count</msg>
<msg time="2026-04-18T03:36:35.803510" level="INFO">${args} = []</msg>
<msg time="2026-04-18T03:36:35.803606" level="INFO">${kwargs} = {'session': 'operational', 'topology': 'example-ipv4-topology'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:36:35.802948" elapsed="0.000693"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Get_Ipv4_Topology_Count" owner="PrefixCounting">
<kw name="Get_Ipv4_Topology" owner="PrefixCounting">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:36:38.898834" level="INFO">GET Request : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01agv6blx930rdupfsp7wkuo902.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-18T03:36:38.913213" level="INFO">GET Response : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Transfer-Encoding': 'chunked'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xmlns="urn:opendaylight:params:xml:ns:yang:odl-bgp-topology-types"/&gt;&lt;/topology-types&gt;&lt;node&gt;&lt;node-id&gt;192.0.2.1&lt;/node-id&gt;&lt;igp-node-attributes xmlns="urn:TBD:params:xml:ns:yang:nt:l3-unicast-igp-topology"&gt;&lt;prefix&gt;&lt;prefix&gt;8.20.15.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.65.76.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.222.18.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.234.69.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.59.125.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.205.46.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.69.249.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.243.186.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.86.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.138.152.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.201.33.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.107.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.133.25.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.19.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.45.49.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.194.22.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.226.161.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.211.127.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.100.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.254.101.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.205.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.60.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.234.208.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.228.239.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.27.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.177.154.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.201.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.148.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.160.202.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.48.218.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.52.93.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.93.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.182.185.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.34.217.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.116.158.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.236.169.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.223.35.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.103.82.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.7.2.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.131.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.40.95.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.244.132.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.28.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.253.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.83.39.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.4.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.193.28.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.36.83.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.143.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.73.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.128.217.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.135.39.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.6.81.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.78.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.54.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.250.105.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.110.78.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.182.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.4.223.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.49.100.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.5.205.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.165.63.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.36.184.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.214.36.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.171.128.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.208.52.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.113.57.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.3.37.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.237.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.160.220.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.198.13.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.174.151.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.48.34.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.21.1.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.1.30.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.108.237.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.89.117.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.218.102.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.24.70.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.41.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.48.122.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.51.175.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.79.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.25.67.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.153.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.219.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.88.115.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.129.239.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.117.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.204.169.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.10.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.139.169.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.79.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.53.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.31.83.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.117.152.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.46.66.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.86.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.3.214.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.74.90.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.197.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.54.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.41.3.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.97.95.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.179.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.188.172.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.219.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.124.44.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.187.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.197.228.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.87.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.133.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.78.124.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.149.209.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.33.23.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.243.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.189.185.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.80.206.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.150.251.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.208.98.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.125.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.213.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.71.27.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.234.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.109.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.112.121.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.8.69.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.201.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.203.154.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.73.19.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.169.175.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.15.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.4.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.75.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.68.155.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.16.40.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.231.11.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.85.57.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.191.139.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.191.228.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.75.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.3.166.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.32.247.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.242.134.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.184.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.164.222.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.35.248.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.209.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.60.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.129.2.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.88.147.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.222.193.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.58.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.61.198.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.32.165.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.120.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.251.232.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.111.147.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.203.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.161.229.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.68.153.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.105.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.252.41.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.2.231.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.240.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.146.121.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.92.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.151.79.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.10.14.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.95.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.155.232.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.32.13.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.92.229.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.102.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.118.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.83.215.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.38.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.110.203.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.240.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.116.31.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.238.174.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.235.83.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.4.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.122.151.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.21.216.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.146.154.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.199.188.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.194.94.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.153.168.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.255.64.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.22.16/28&lt;/pref... (set the log level to DEBUG or TRACE to see the full content) 
 </msg>
<msg time="2026-04-18T03:36:38.913822" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${PC_NW_TOPOLOGY}=${topology}?content=nonconfig</arg>
<arg>expected_status=anything</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-18T03:36:35.810728" elapsed="3.103156"/>
</kw>
<if>
<branch type="IF" condition="${response.status_code} != 200">
<kw name="Fail" owner="BuiltIn">
<arg>Get on ${topology} returned status code ${response.status_code} with message: ${response.text}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:36:38.917044" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:36:38.914112" elapsed="0.003015"/>
</branch>
<status status="PASS" start="2026-04-18T03:36:38.914041" elapsed="0.003136"/>
</if>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-18T03:36:38.917282" elapsed="0.000115"/>
</return>
<msg time="2026-04-18T03:36:38.925595" level="INFO">${topology} = &lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xml...</msg>
<var>${topology}</var>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>GET the example-ipv4-topology data, check status is 200, return the topology data.</doc>
<status status="PASS" start="2026-04-18T03:36:35.807727" elapsed="3.117986"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:36:39.021021" level="INFO">${prefix_count} = 0</msg>
<var>${prefix_count}</var>
<arg>len(re.findall('"prefix":"', '''${topology}'''))</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:36:38.926086" elapsed="0.095074"/>
</kw>
<return>
<value>${prefix_count}</value>
<status status="PASS" start="2026-04-18T03:36:39.021320" elapsed="0.000072"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Get topology. If not fail, return number of prefixes in the topology.</doc>
<status status="PASS" start="2026-04-18T03:36:35.804577" elapsed="3.217205"/>
</kw>
<msg time="2026-04-18T03:36:39.021910" level="INFO">${result} = 0</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:36:35.803875" elapsed="3.218072"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:36:39.022022" elapsed="0.000038"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure without affecting arguments.</doc>
<status status="PASS" start="2026-04-18T03:36:35.802416" elapsed="3.219774"/>
</kw>
<msg time="2026-04-18T03:36:39.022315" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:36:39.022379" level="INFO">${message} = 0</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:36:35.801687" elapsed="3.220727"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:36:39.022749" elapsed="0.033910"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:36:39.057673" elapsed="0.000033"/>
</return>
<status status="PASS" start="2026-04-18T03:36:39.057519" elapsed="0.000222"/>
</branch>
<status status="PASS" start="2026-04-18T03:36:39.057495" elapsed="0.000271"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:36:39.057936" elapsed="0.000023"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with 0.</doc>
<status status="PASS" start="2026-04-18T03:36:39.057101" elapsed="0.000919"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:36:39.058065" elapsed="0.000027"/>
</return>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:36:35.801042" elapsed="3.257152"/>
</kw>
<msg time="2026-04-18T03:36:39.058294" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:36:39.058341" level="INFO">${data} = 0</msg>
<var>${status}</var>
<var>${data}</var>
<arg>ScalarClosures.Run_Keyword_And_Collect_Garbage</arg>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:36:35.800402" elapsed="3.257962"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Getter failed: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:36:39.058566" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:36:39.058441" elapsed="0.000176"/>
</branch>
<status status="PASS" start="2026-04-18T03:36:39.058422" elapsed="0.000218"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:36:39.060087" level="INFO">${date_now} = 2026-04-18 03:36:39.060</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:36:39.059917" elapsed="0.000198"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:36:39.060660" level="INFO">${time_deadline} = 215.105</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:36:39.060268" elapsed="0.000419"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:36:39.061243" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:36:39.060853" elapsed="0.000417"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:36:39.061604" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:36:39.061341" elapsed="0.000318"/>
</branch>
<status status="PASS" start="2026-04-18T03:36:39.061322" elapsed="0.000360"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:36:39.059290" elapsed="0.002440"/>
</kw>
<msg time="2026-04-18T03:36:39.061828" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:36:39.061872" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:36:39.058801" elapsed="0.003095"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:36:39.062300" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:36:39.062190" elapsed="0.000161"/>
</branch>
<status status="PASS" start="2026-04-18T03:36:39.062170" elapsed="0.000204"/>
</if>
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_After_Replacing_First_Two_Arguments" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:36:39.064432" level="INFO">${keyword} = WaitUtils.Excluding_Stability_Safe_Stateful_Validator_As_Keyword</msg>
<msg time="2026-04-18T03:36:39.064481" level="INFO">${args} = [0, 0]</msg>
<msg time="2026-04-18T03:36:39.064543" level="INFO">${kwargs} = {'excluded_value': '0'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:36:39.064120" elapsed="0.000449"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>0</arg>
<arg>${arg1}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:36:39.064746" elapsed="0.000237"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>1</arg>
<arg>${arg2}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:36:39.065147" elapsed="0.000197"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Excluding_Stability_Safe_Stateful_Validator_As_Keyword" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:36:39.067104" level="INFO">${new_state} = 0</msg>
<var>${new_state}</var>
<arg>${data}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:36:39.066688" elapsed="0.000444"/>
</kw>
<if>
<branch type="IF" condition="${data} == ${excluded_value}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Got the excluded value.</value>
<status status="PASS" start="2026-04-18T03:36:39.067379" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-18T03:36:39.067204" elapsed="0.000243"/>
</branch>
<status status="PASS" start="2026-04-18T03:36:39.067185" elapsed="0.000287"/>
</if>
<if>
<branch type="IF" condition="${data} != ${old_state}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Data value has changed.</value>
<status status="NOT RUN" start="2026-04-18T03:36:39.067598" elapsed="0.000152"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:36:39.067558" elapsed="0.000231"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:36:39.067512" elapsed="0.000299"/>
</if>
<return>
<value>${new_state}</value>
<value>PASS</value>
<value>Validated stable: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:36:39.067845" elapsed="0.000014"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Report failure if got the excluded value or if data value changed from last time. Useful to become validator.</doc>
<status status="PASS" start="2026-04-18T03:36:39.066211" elapsed="0.001756"/>
</kw>
<msg time="2026-04-18T03:36:39.068052" level="INFO">${result} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:36:39.065508" elapsed="0.002569"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:36:39.068125" elapsed="0.000027"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure with replaced first two positional arguments.</doc>
<status status="PASS" start="2026-04-18T03:36:39.063719" elapsed="0.004526"/>
</kw>
<msg time="2026-04-18T03:36:39.068336" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:36:39.068381" level="INFO">${message} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:36:39.063080" elapsed="0.005324"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:36:39.068593" elapsed="0.025081"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:36:39.094650" elapsed="0.000032"/>
</return>
<status status="PASS" start="2026-04-18T03:36:39.094498" elapsed="0.000218"/>
</branch>
<status status="PASS" start="2026-04-18T03:36:39.094476" elapsed="0.000264"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:36:39.094903" elapsed="0.000022"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with [0, 'FAIL', 'Got the excluded value.'].</doc>
<status status="PASS" start="2026-04-18T03:36:39.094099" elapsed="0.000885"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:36:39.095028" elapsed="0.000026"/>
</return>
<msg time="2026-04-18T03:36:39.095198" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:36:39.095244" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:36:39.095285" level="INFO">${result} = Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>ScalarClosures.Run_Closure_After_Replacing_First_Two_Arguments</arg>
<arg>${safe_validator}</arg>
<arg>${state}</arg>
<arg>${data}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:36:39.062615" elapsed="0.032693"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Validator failed: ${result}</value>
<status status="PASS" start="2026-04-18T03:36:39.095495" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-04-18T03:36:39.095390" elapsed="0.000240"/>
</branch>
<status status="PASS" start="2026-04-18T03:36:39.095372" elapsed="0.000283"/>
</if>
<if>
<branch type="IF" condition="${sleeps_left} &lt;= 0">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:36:39.095746" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:36:39.095710" elapsed="0.000081"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:36:39.095695" elapsed="0.000120"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-18T03:36:39.095973" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:36:39.096107" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:36:39.096072" elapsed="0.000157"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:36:39.096056" elapsed="0.000198"/>
</if>
<kw name="Sleep" owner="BuiltIn">
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-04-18T03:36:39.096396" elapsed="0.000021"/>
</kw>
<var name="${sleeps_left}">0</var>
<status status="PASS" start="2026-04-18T03:36:35.800197" elapsed="3.296254"/>
</iter>
<var>${sleeps_left}</var>
<value>${count}-1</value>
<value>-1</value>
<value>-1</value>
<status status="PASS" start="2026-04-18T03:36:35.799663" elapsed="3.296823"/>
</for>
<kw name="Fail" owner="BuiltIn">
<arg>Logic error, we should have returned before.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:36:39.096658" elapsed="0.000021"/>
</kw>
<msg time="2026-04-18T03:36:39.096881" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:36:39.096925" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:36:39.096966" level="INFO">${result} = Validator failed: Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>count=${count}</arg>
<arg>getter=${getter}</arg>
<arg>safe_validator=${safe_validator}</arg>
<arg>initial_state=${state}</arg>
<doc>Pass only if consecutively 1 times in a row with 60 between attempts: ${getter} creates data and ${safe_validator} passes. Validator updates its state even if it reports failure. Always return validator state, status and message.</doc>
<status status="PASS" start="2026-04-18T03:36:35.788928" elapsed="3.308061"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:36:39.097181" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:36:39.097076" elapsed="0.000148"/>
</branch>
<status status="PASS" start="2026-04-18T03:36:39.097058" elapsed="0.000188"/>
</if>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:36:39.098575" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:36:39.098658" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:36:39.098282" elapsed="0.000444">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:36:39.098830" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:36:39.098873" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:36:39.097902" elapsed="0.000993"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:36:39.099077" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:36:39.098970" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-04-18T03:36:39.098951" elapsed="0.000192"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:36:39.099575" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:36:39.099293" elapsed="0.000311"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:36:39.102709" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:36:39.102789" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:36:39.100110" elapsed="0.002739">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:36:39.102952" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:36:39.102995" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:36:39.099772" elapsed="0.003246"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:36:39.103200" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-04-18T03:36:39.103092" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-04-18T03:36:39.103073" elapsed="0.000208"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:36:39.103428" elapsed="0.000021"/>
</kw>
<arg>${result}</arg>
<arg>Not possible to succeed within the deadline.</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:36:39.097511" elapsed="0.006111"/>
</kw>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:36:39.104887" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:36:39.104960" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:36:39.104628" elapsed="0.000389">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:36:39.105115" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:36:39.105157" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:36:39.104275" elapsed="0.000904"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:36:39.105359" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:36:39.105252" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-04-18T03:36:39.105234" elapsed="0.000190"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:36:39.105836" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:36:39.105588" elapsed="0.000275"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:36:39.108798" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:36:39.108871" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:36:39.106360" elapsed="0.002568">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:36:39.109142" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:36:39.109191" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:36:39.106028" elapsed="0.003186"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:36:39.109397" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-18T03:36:39.109289" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-04-18T03:36:39.109270" elapsed="0.000210"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:36:39.109645" elapsed="0.000022"/>
</kw>
<arg>${result}</arg>
<arg>Getter failed</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:36:39.103903" elapsed="0.005894"/>
</kw>
<kw name="Sleep" owner="BuiltIn">
<msg time="2026-04-18T03:37:39.110828" level="INFO">Slept 1 minute.</msg>
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="PASS" start="2026-04-18T03:36:39.109951" elapsed="60.001386"/>
</kw>
<var name="${try}">13</var>
<status status="PASS" start="2026-04-18T03:36:35.787464" elapsed="63.324046"/>
</iter>
<iter>
<kw name="Getter_And_Safe_Stateful_Validator_Have_To_Succeed_Consecutively_By_Deadline" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:37:39.116276" level="INFO">${result} = No result yet.</msg>
<var>${result}</var>
<arg>No result yet.</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:37:39.115423" elapsed="0.000917"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:37:39.117174" level="INFO">${state} = 0</msg>
<var>${state}</var>
<arg>${initial_state}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:37:39.116755" elapsed="0.000457"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:37:39.117973" level="INFO">${sleeps} = 0</msg>
<var>${sleeps}</var>
<arg>${count} - 1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:37:39.117440" elapsed="0.000571"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:37:39.120384" level="INFO">${date_now} = 2026-04-18 03:37:39.120</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:37:39.120132" elapsed="0.000290"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:37:39.121208" level="INFO">${time_deadline} = 155.045</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:37:39.120668" elapsed="0.000578"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:37:39.122047" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:37:39.121479" elapsed="0.000606"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:37:39.122571" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:37:39.122194" elapsed="0.000457"/>
</branch>
<status status="PASS" start="2026-04-18T03:37:39.122163" elapsed="0.000526"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:37:39.118910" elapsed="0.003854"/>
</kw>
<msg time="2026-04-18T03:37:39.122907" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:37:39.122970" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:37:39.118254" elapsed="0.004749"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:37:39.123268" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:37:39.123115" elapsed="0.000225"/>
</branch>
<status status="PASS" start="2026-04-18T03:37:39.123090" elapsed="0.000282"/>
</if>
<for flavor="IN RANGE">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_As_Is" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:37:39.126600" level="INFO">${keyword} = Get_Ipv4_Topology_Count</msg>
<msg time="2026-04-18T03:37:39.126649" level="INFO">${args} = []</msg>
<msg time="2026-04-18T03:37:39.126697" level="INFO">${kwargs} = {'session': 'operational', 'topology': 'example-ipv4-topology'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:37:39.126204" elapsed="0.000516"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Get_Ipv4_Topology_Count" owner="PrefixCounting">
<kw name="Get_Ipv4_Topology" owner="PrefixCounting">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:37:47.605263" level="INFO">GET Request : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01agv6blx930rdupfsp7wkuo902.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-18T03:37:47.616931" level="INFO">GET Response : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Transfer-Encoding': 'chunked'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xmlns="urn:opendaylight:params:xml:ns:yang:odl-bgp-topology-types"/&gt;&lt;/topology-types&gt;&lt;node&gt;&lt;node-id&gt;192.0.2.1&lt;/node-id&gt;&lt;igp-node-attributes xmlns="urn:TBD:params:xml:ns:yang:nt:l3-unicast-igp-topology"&gt;&lt;prefix&gt;&lt;prefix&gt;8.20.15.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.65.76.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.222.18.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.234.69.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.59.125.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.205.46.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.69.249.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.243.186.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.86.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.138.152.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.201.33.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.107.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.133.25.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.19.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.45.49.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.194.22.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.226.161.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.211.127.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.100.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.254.101.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.205.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.60.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.234.208.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.228.239.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.27.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.177.154.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.201.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.148.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.160.202.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.48.218.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.52.93.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.93.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.182.185.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.34.217.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.116.158.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.236.169.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.223.35.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.103.82.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.7.2.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.131.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.40.95.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.244.132.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.28.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.253.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.83.39.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.4.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.193.28.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.36.83.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.143.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.73.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.128.217.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.135.39.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.6.81.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.78.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.54.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.250.105.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.110.78.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.182.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.4.223.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.49.100.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.5.205.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.165.63.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.36.184.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.214.36.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.171.128.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.208.52.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.113.57.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.3.37.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.237.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.160.220.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.198.13.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.174.151.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.48.34.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.21.1.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.1.30.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.108.237.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.89.117.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.218.102.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.24.70.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.41.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.48.122.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.51.175.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.79.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.25.67.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.153.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.219.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.88.115.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.129.239.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.117.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.204.169.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.10.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.139.169.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.79.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.53.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.31.83.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.117.152.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.46.66.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.86.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.3.214.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.74.90.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.197.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.54.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.41.3.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.97.95.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.179.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.188.172.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.219.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.124.44.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.187.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.197.228.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.87.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.133.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.78.124.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.149.209.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.33.23.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.243.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.189.185.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.80.206.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.150.251.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.208.98.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.125.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.213.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.71.27.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.234.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.109.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.112.121.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.8.69.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.201.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.203.154.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.73.19.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.169.175.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.15.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.4.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.75.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.68.155.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.16.40.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.231.11.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.85.57.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.191.139.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.191.228.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.75.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.3.166.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.32.247.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.242.134.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.184.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.164.222.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.35.248.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.209.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.60.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.129.2.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.88.147.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.222.193.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.58.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.61.198.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.32.165.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.120.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.251.232.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.111.147.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.203.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.161.229.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.68.153.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.105.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.252.41.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.2.231.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.240.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.146.121.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.92.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.151.79.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.10.14.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.95.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.155.232.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.32.13.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.92.229.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.102.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.118.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.83.215.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.38.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.110.203.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.240.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.116.31.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.238.174.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.235.83.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.4.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.122.151.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.21.216.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.146.154.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.199.188.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.194.94.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.153.168.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.255.64.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.22.16/28&lt;/pref... (set the log level to DEBUG or TRACE to see the full content) 
 </msg>
<msg time="2026-04-18T03:37:47.620339" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${PC_NW_TOPOLOGY}=${topology}?content=nonconfig</arg>
<arg>expected_status=anything</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-18T03:37:39.129619" elapsed="8.490795"/>
</kw>
<if>
<branch type="IF" condition="${response.status_code} != 200">
<kw name="Fail" owner="BuiltIn">
<arg>Get on ${topology} returned status code ${response.status_code} with message: ${response.text}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:37:47.623565" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:37:47.620720" elapsed="0.002932"/>
</branch>
<status status="PASS" start="2026-04-18T03:37:47.620632" elapsed="0.003069"/>
</if>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-18T03:37:47.623807" elapsed="0.000079"/>
</return>
<msg time="2026-04-18T03:37:47.639006" level="INFO">${topology} = &lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xml...</msg>
<var>${topology}</var>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>GET the example-ipv4-topology data, check status is 200, return the topology data.</doc>
<status status="PASS" start="2026-04-18T03:37:39.128646" elapsed="8.510479"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:37:47.736072" level="INFO">${prefix_count} = 0</msg>
<var>${prefix_count}</var>
<arg>len(re.findall('"prefix":"', '''${topology}'''))</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:37:47.639488" elapsed="0.096689"/>
</kw>
<return>
<value>${prefix_count}</value>
<status status="PASS" start="2026-04-18T03:37:47.736305" elapsed="0.000059"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Get topology. If not fail, return number of prefixes in the topology.</doc>
<status status="PASS" start="2026-04-18T03:37:39.127371" elapsed="8.609297"/>
</kw>
<msg time="2026-04-18T03:37:47.736764" level="INFO">${result} = 0</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:37:39.126890" elapsed="8.609899"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:37:47.736842" elapsed="0.000029"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure without affecting arguments.</doc>
<status status="PASS" start="2026-04-18T03:37:39.125832" elapsed="8.611138"/>
</kw>
<msg time="2026-04-18T03:37:47.737070" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:37:47.737114" level="INFO">${message} = 0</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:37:39.125287" elapsed="8.611850"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:37:47.737370" elapsed="0.027397"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:37:47.765770" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-04-18T03:37:47.765635" elapsed="0.000203"/>
</branch>
<status status="PASS" start="2026-04-18T03:37:47.765612" elapsed="0.000251"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:37:47.766031" elapsed="0.000023"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with 0.</doc>
<status status="PASS" start="2026-04-18T03:37:47.765198" elapsed="0.000915"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:37:47.766156" elapsed="0.000027"/>
</return>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:37:39.124874" elapsed="8.641404"/>
</kw>
<msg time="2026-04-18T03:37:47.766377" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:37:47.766424" level="INFO">${data} = 0</msg>
<var>${status}</var>
<var>${data}</var>
<arg>ScalarClosures.Run_Keyword_And_Collect_Garbage</arg>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:37:39.124263" elapsed="8.642184"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Getter failed: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:37:47.766650" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:37:47.766523" elapsed="0.000176"/>
</branch>
<status status="PASS" start="2026-04-18T03:37:47.766505" elapsed="0.000216"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:37:47.768196" level="INFO">${date_now} = 2026-04-18 03:37:47.768</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:37:47.768023" elapsed="0.000201"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:37:47.768774" level="INFO">${time_deadline} = 146.397</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:37:47.768377" elapsed="0.000424"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:37:47.769352" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:37:47.768965" elapsed="0.000413"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:37:47.769719" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:37:47.769449" elapsed="0.000324"/>
</branch>
<status status="PASS" start="2026-04-18T03:37:47.769430" elapsed="0.000367"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:37:47.767378" elapsed="0.002466"/>
</kw>
<msg time="2026-04-18T03:37:47.769941" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:37:47.769986" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:37:47.766881" elapsed="0.003128"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:37:47.770278" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:37:47.770172" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-18T03:37:47.770153" elapsed="0.000197"/>
</if>
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_After_Replacing_First_Two_Arguments" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:37:47.772342" level="INFO">${keyword} = WaitUtils.Excluding_Stability_Safe_Stateful_Validator_As_Keyword</msg>
<msg time="2026-04-18T03:37:47.772391" level="INFO">${args} = [0, 0]</msg>
<msg time="2026-04-18T03:37:47.772436" level="INFO">${kwargs} = {'excluded_value': '0'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:37:47.772033" elapsed="0.000426"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>0</arg>
<arg>${arg1}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:37:47.772641" elapsed="0.000211"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>1</arg>
<arg>${arg2}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:37:47.773013" elapsed="0.000195"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Excluding_Stability_Safe_Stateful_Validator_As_Keyword" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:37:47.774945" level="INFO">${new_state} = 0</msg>
<var>${new_state}</var>
<arg>${data}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:37:47.774524" elapsed="0.000448"/>
</kw>
<if>
<branch type="IF" condition="${data} == ${excluded_value}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Got the excluded value.</value>
<status status="PASS" start="2026-04-18T03:37:47.775214" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-18T03:37:47.775042" elapsed="0.000239"/>
</branch>
<status status="PASS" start="2026-04-18T03:37:47.775023" elapsed="0.000282"/>
</if>
<if>
<branch type="IF" condition="${data} != ${old_state}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Data value has changed.</value>
<status status="NOT RUN" start="2026-04-18T03:37:47.775394" elapsed="0.000166"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:37:47.775359" elapsed="0.000240"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:37:47.775344" elapsed="0.000277"/>
</if>
<return>
<value>${new_state}</value>
<value>PASS</value>
<value>Validated stable: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:37:47.775654" elapsed="0.000015"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Report failure if got the excluded value or if data value changed from last time. Useful to become validator.</doc>
<status status="PASS" start="2026-04-18T03:37:47.774082" elapsed="0.001693"/>
</kw>
<msg time="2026-04-18T03:37:47.775860" level="INFO">${result} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:37:47.773374" elapsed="0.002512"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:37:47.775935" elapsed="0.000027"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure with replaced first two positional arguments.</doc>
<status status="PASS" start="2026-04-18T03:37:47.771619" elapsed="0.004471"/>
</kw>
<msg time="2026-04-18T03:37:47.776188" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:37:47.776234" level="INFO">${message} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:37:47.771060" elapsed="0.005198"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:37:47.776424" elapsed="0.025703"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:37:47.803129" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-04-18T03:37:47.802995" elapsed="0.000202"/>
</branch>
<status status="PASS" start="2026-04-18T03:37:47.802971" elapsed="0.000251"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:37:47.803387" elapsed="0.000022"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with [0, 'FAIL', 'Got the excluded value.'].</doc>
<status status="PASS" start="2026-04-18T03:37:47.802581" elapsed="0.000888"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:37:47.803514" elapsed="0.000048"/>
</return>
<msg time="2026-04-18T03:37:47.803709" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:37:47.803756" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:37:47.803797" level="INFO">${result} = Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>ScalarClosures.Run_Closure_After_Replacing_First_Two_Arguments</arg>
<arg>${safe_validator}</arg>
<arg>${state}</arg>
<arg>${data}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:37:47.770593" elapsed="0.033227"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Validator failed: ${result}</value>
<status status="PASS" start="2026-04-18T03:37:47.804009" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-04-18T03:37:47.803903" elapsed="0.000169"/>
</branch>
<status status="PASS" start="2026-04-18T03:37:47.803885" elapsed="0.000212"/>
</if>
<if>
<branch type="IF" condition="${sleeps_left} &lt;= 0">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:37:47.804188" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:37:47.804151" elapsed="0.000082"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:37:47.804136" elapsed="0.000120"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-18T03:37:47.804432" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:37:47.804587" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:37:47.804533" elapsed="0.000174"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:37:47.804517" elapsed="0.000215"/>
</if>
<kw name="Sleep" owner="BuiltIn">
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-04-18T03:37:47.804876" elapsed="0.000022"/>
</kw>
<var name="${sleeps_left}">0</var>
<status status="PASS" start="2026-04-18T03:37:39.124052" elapsed="8.680880"/>
</iter>
<var>${sleeps_left}</var>
<value>${count}-1</value>
<value>-1</value>
<value>-1</value>
<status status="PASS" start="2026-04-18T03:37:39.123427" elapsed="8.681540"/>
</for>
<kw name="Fail" owner="BuiltIn">
<arg>Logic error, we should have returned before.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:37:47.805128" elapsed="0.000021"/>
</kw>
<msg time="2026-04-18T03:37:47.805355" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:37:47.805401" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:37:47.805441" level="INFO">${result} = Validator failed: Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>count=${count}</arg>
<arg>getter=${getter}</arg>
<arg>safe_validator=${safe_validator}</arg>
<arg>initial_state=${state}</arg>
<doc>Pass only if consecutively 1 times in a row with 60 between attempts: ${getter} creates data and ${safe_validator} passes. Validator updates its state even if it reports failure. Always return validator state, status and message.</doc>
<status status="PASS" start="2026-04-18T03:37:39.113683" elapsed="8.691782"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:37:47.805679" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:37:47.805571" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-04-18T03:37:47.805539" elapsed="0.000206"/>
</if>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:37:47.807074" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:37:47.807158" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:37:47.806793" elapsed="0.000433">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:37:47.807329" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:37:47.807372" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:37:47.806397" elapsed="0.000998"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:37:47.807599" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:37:47.807471" elapsed="0.000173"/>
</branch>
<status status="PASS" start="2026-04-18T03:37:47.807452" elapsed="0.000214"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:37:47.808072" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:37:47.807818" elapsed="0.000282"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:37:47.811245" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:37:47.811320" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:37:47.808675" elapsed="0.002704">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:37:47.811482" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:37:47.811524" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:37:47.808266" elapsed="0.003298"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:37:47.811749" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-04-18T03:37:47.811641" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-04-18T03:37:47.811622" elapsed="0.000209"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:37:47.811982" elapsed="0.000021"/>
</kw>
<arg>${result}</arg>
<arg>Not possible to succeed within the deadline.</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:37:47.806016" elapsed="0.006134"/>
</kw>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:37:47.813439" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:37:47.813511" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:37:47.813181" elapsed="0.000405">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:37:47.813686" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:37:47.813728" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:37:47.812842" elapsed="0.000908"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:37:47.813930" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:37:47.813824" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-04-18T03:37:47.813805" elapsed="0.000191"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:37:47.814394" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:37:47.814149" elapsed="0.000271"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:37:47.817344" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:37:47.817417" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:37:47.814934" elapsed="0.002540">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:37:47.817634" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:37:47.817678" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:37:47.814602" elapsed="0.003099"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:37:47.817883" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-04-18T03:37:47.817775" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-04-18T03:37:47.817756" elapsed="0.000210"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:37:47.818113" elapsed="0.000021"/>
</kw>
<arg>${result}</arg>
<arg>Getter failed</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:37:47.812431" elapsed="0.005832"/>
</kw>
<kw name="Sleep" owner="BuiltIn">
<msg time="2026-04-18T03:38:47.818953" level="INFO">Slept 1 minute.</msg>
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="PASS" start="2026-04-18T03:37:47.818414" elapsed="60.000768"/>
</kw>
<var name="${try}">14</var>
<status status="PASS" start="2026-04-18T03:37:39.112202" elapsed="68.707092"/>
</iter>
<iter>
<kw name="Getter_And_Safe_Stateful_Validator_Have_To_Succeed_Consecutively_By_Deadline" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:38:47.823912" level="INFO">${result} = No result yet.</msg>
<var>${result}</var>
<arg>No result yet.</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:38:47.823213" elapsed="0.000759"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:38:47.825124" level="INFO">${state} = 0</msg>
<var>${state}</var>
<arg>${initial_state}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:38:47.824374" elapsed="0.000810"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:38:47.826364" level="INFO">${sleeps} = 0</msg>
<var>${sleeps}</var>
<arg>${count} - 1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:38:47.825578" elapsed="0.000843"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:38:47.830222" level="INFO">${date_now} = 2026-04-18 03:38:47.830</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:38:47.829797" elapsed="0.000497"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:38:47.831052" level="INFO">${time_deadline} = 86.335</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:38:47.830674" elapsed="0.000404"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:38:47.831647" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:38:47.831243" elapsed="0.000435"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:38:47.832007" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:38:47.831755" elapsed="0.000308"/>
</branch>
<status status="PASS" start="2026-04-18T03:38:47.831733" elapsed="0.000355"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:38:47.827888" elapsed="0.004249"/>
</kw>
<msg time="2026-04-18T03:38:47.832243" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:38:47.832288" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:38:47.826861" elapsed="0.005455"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:38:47.832501" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:38:47.832395" elapsed="0.000175"/>
</branch>
<status status="PASS" start="2026-04-18T03:38:47.832377" elapsed="0.000216"/>
</if>
<for flavor="IN RANGE">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_As_Is" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:38:47.835318" level="INFO">${keyword} = Get_Ipv4_Topology_Count</msg>
<msg time="2026-04-18T03:38:47.835365" level="INFO">${args} = []</msg>
<msg time="2026-04-18T03:38:47.835412" level="INFO">${kwargs} = {'session': 'operational', 'topology': 'example-ipv4-topology'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:38:47.834950" elapsed="0.000485"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Get_Ipv4_Topology_Count" owner="PrefixCounting">
<kw name="Get_Ipv4_Topology" owner="PrefixCounting">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:38:50.891638" level="INFO">GET Request : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01agv6blx930rdupfsp7wkuo902.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-18T03:38:50.906067" level="INFO">GET Response : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Transfer-Encoding': 'chunked'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xmlns="urn:opendaylight:params:xml:ns:yang:odl-bgp-topology-types"/&gt;&lt;/topology-types&gt;&lt;node&gt;&lt;node-id&gt;192.0.2.1&lt;/node-id&gt;&lt;igp-node-attributes xmlns="urn:TBD:params:xml:ns:yang:nt:l3-unicast-igp-topology"&gt;&lt;prefix&gt;&lt;prefix&gt;8.20.15.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.65.76.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.222.18.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.234.69.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.59.125.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.205.46.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.69.249.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.243.186.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.86.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.138.152.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.201.33.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.107.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.133.25.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.19.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.45.49.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.194.22.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.226.161.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.211.127.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.100.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.254.101.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.205.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.60.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.234.208.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.228.239.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.27.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.177.154.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.201.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.148.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.160.202.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.48.218.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.52.93.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.93.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.182.185.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.34.217.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.116.158.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.236.169.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.223.35.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.103.82.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.7.2.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.131.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.40.95.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.244.132.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.28.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.253.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.83.39.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.4.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.193.28.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.36.83.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.143.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.73.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.128.217.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.135.39.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.6.81.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.78.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.54.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.250.105.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.110.78.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.182.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.4.223.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.49.100.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.5.205.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.165.63.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.36.184.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.214.36.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.171.128.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.208.52.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.113.57.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.3.37.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.237.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.160.220.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.198.13.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.174.151.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.48.34.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.21.1.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.1.30.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.108.237.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.89.117.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.218.102.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.24.70.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.41.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.48.122.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.51.175.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.79.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.25.67.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.153.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.219.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.88.115.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.129.239.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.117.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.204.169.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.10.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.139.169.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.79.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.53.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.31.83.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.117.152.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.46.66.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.86.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.3.214.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.74.90.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.197.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.54.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.41.3.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.97.95.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.179.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.188.172.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.219.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.124.44.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.187.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.197.228.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.87.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.133.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.78.124.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.149.209.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.33.23.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.243.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.189.185.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.80.206.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.150.251.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.208.98.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.125.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.213.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.71.27.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.234.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.109.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.112.121.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.8.69.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.201.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.203.154.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.73.19.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.169.175.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.15.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.4.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.75.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.68.155.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.16.40.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.231.11.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.85.57.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.191.139.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.191.228.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.75.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.3.166.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.32.247.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.242.134.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.184.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.164.222.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.35.248.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.209.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.60.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.129.2.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.88.147.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.222.193.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.58.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.61.198.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.32.165.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.120.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.251.232.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.111.147.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.203.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.161.229.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.68.153.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.105.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.252.41.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.2.231.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.240.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.146.121.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.92.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.151.79.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.10.14.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.95.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.155.232.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.32.13.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.92.229.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.102.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.118.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.83.215.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.38.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.110.203.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.240.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.116.31.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.238.174.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.235.83.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.4.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.122.151.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.21.216.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.146.154.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.199.188.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.194.94.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.153.168.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.255.64.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.22.16/28&lt;/pref... (set the log level to DEBUG or TRACE to see the full content) 
 </msg>
<msg time="2026-04-18T03:38:50.906680" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${PC_NW_TOPOLOGY}=${topology}?content=nonconfig</arg>
<arg>expected_status=anything</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-18T03:38:47.838328" elapsed="3.068411"/>
</kw>
<if>
<branch type="IF" condition="${response.status_code} != 200">
<kw name="Fail" owner="BuiltIn">
<arg>Get on ${topology} returned status code ${response.status_code} with message: ${response.text}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:38:50.909758" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:38:50.906972" elapsed="0.002870"/>
</branch>
<status status="PASS" start="2026-04-18T03:38:50.906900" elapsed="0.002993"/>
</if>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-18T03:38:50.909996" elapsed="0.000080"/>
</return>
<msg time="2026-04-18T03:38:50.917316" level="INFO">${topology} = &lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xml...</msg>
<var>${topology}</var>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>GET the example-ipv4-topology data, check status is 200, return the topology data.</doc>
<status status="PASS" start="2026-04-18T03:38:47.837339" elapsed="3.080098"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:38:51.005758" level="INFO">${prefix_count} = 0</msg>
<var>${prefix_count}</var>
<arg>len(re.findall('"prefix":"', '''${topology}'''))</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:38:50.917860" elapsed="0.088004"/>
</kw>
<return>
<value>${prefix_count}</value>
<status status="PASS" start="2026-04-18T03:38:51.005992" elapsed="0.000056"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Get topology. If not fail, return number of prefixes in the topology.</doc>
<status status="PASS" start="2026-04-18T03:38:47.836104" elapsed="3.170220"/>
</kw>
<msg time="2026-04-18T03:38:51.006418" level="INFO">${result} = 0</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:38:47.835626" elapsed="3.170818"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:38:51.006495" elapsed="0.000058"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure without affecting arguments.</doc>
<status status="PASS" start="2026-04-18T03:38:47.834570" elapsed="3.172084"/>
</kw>
<msg time="2026-04-18T03:38:51.006754" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:38:51.006799" level="INFO">${message} = 0</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:38:47.834035" elapsed="3.172788"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:38:51.007056" elapsed="0.026678"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:38:51.034757" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-04-18T03:38:51.034620" elapsed="0.000204"/>
</branch>
<status status="PASS" start="2026-04-18T03:38:51.034596" elapsed="0.000253"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:38:51.035013" elapsed="0.000023"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with 0.</doc>
<status status="PASS" start="2026-04-18T03:38:51.034177" elapsed="0.000919"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:38:51.035140" elapsed="0.000026"/>
</return>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:38:47.833627" elapsed="3.201635"/>
</kw>
<msg time="2026-04-18T03:38:51.035403" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:38:51.035451" level="INFO">${data} = 0</msg>
<var>${status}</var>
<var>${data}</var>
<arg>ScalarClosures.Run_Keyword_And_Collect_Garbage</arg>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:38:47.833168" elapsed="3.202306"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Getter failed: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:38:51.035677" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:38:51.035569" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-18T03:38:51.035549" elapsed="0.000199"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:38:51.037180" level="INFO">${date_now} = 2026-04-18 03:38:51.037</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:38:51.037011" elapsed="0.000196"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:38:51.037756" level="INFO">${time_deadline} = 83.128</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:38:51.037361" elapsed="0.000422"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:38:51.038344" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:38:51.037951" elapsed="0.000420"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:38:51.038711" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:38:51.038442" elapsed="0.000325"/>
</branch>
<status status="PASS" start="2026-04-18T03:38:51.038423" elapsed="0.000368"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:38:51.036398" elapsed="0.002442"/>
</kw>
<msg time="2026-04-18T03:38:51.038940" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:38:51.038985" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:38:51.035909" elapsed="0.003100"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:38:51.039271" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:38:51.039163" elapsed="0.000174"/>
</branch>
<status status="PASS" start="2026-04-18T03:38:51.039145" elapsed="0.000215"/>
</if>
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_After_Replacing_First_Two_Arguments" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:38:51.041342" level="INFO">${keyword} = WaitUtils.Excluding_Stability_Safe_Stateful_Validator_As_Keyword</msg>
<msg time="2026-04-18T03:38:51.041389" level="INFO">${args} = [0, 0]</msg>
<msg time="2026-04-18T03:38:51.041436" level="INFO">${kwargs} = {'excluded_value': '0'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:38:51.041033" elapsed="0.000486"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>0</arg>
<arg>${arg1}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:38:51.041704" elapsed="0.000215"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>1</arg>
<arg>${arg2}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:38:51.042079" elapsed="0.000191"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Excluding_Stability_Safe_Stateful_Validator_As_Keyword" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:38:51.044094" level="INFO">${new_state} = 0</msg>
<var>${new_state}</var>
<arg>${data}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:38:51.043690" elapsed="0.000431"/>
</kw>
<if>
<branch type="IF" condition="${data} == ${excluded_value}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Got the excluded value.</value>
<status status="PASS" start="2026-04-18T03:38:51.044366" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-18T03:38:51.044193" elapsed="0.000241"/>
</branch>
<status status="PASS" start="2026-04-18T03:38:51.044174" elapsed="0.000284"/>
</if>
<if>
<branch type="IF" condition="${data} != ${old_state}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Data value has changed.</value>
<status status="NOT RUN" start="2026-04-18T03:38:51.044565" elapsed="0.000148"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:38:51.044512" elapsed="0.000239"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:38:51.044497" elapsed="0.000276"/>
</if>
<return>
<value>${new_state}</value>
<value>PASS</value>
<value>Validated stable: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:38:51.044805" elapsed="0.000015"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Report failure if got the excluded value or if data value changed from last time. Useful to become validator.</doc>
<status status="PASS" start="2026-04-18T03:38:51.043172" elapsed="0.001753"/>
</kw>
<msg time="2026-04-18T03:38:51.045009" level="INFO">${result} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:38:51.042434" elapsed="0.002600"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:38:51.045083" elapsed="0.000027"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure with replaced first two positional arguments.</doc>
<status status="PASS" start="2026-04-18T03:38:51.040638" elapsed="0.004565"/>
</kw>
<msg time="2026-04-18T03:38:51.045295" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:38:51.045339" level="INFO">${message} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:38:51.040077" elapsed="0.005285"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:38:51.045542" elapsed="0.023699"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:38:51.070221" elapsed="0.000033"/>
</return>
<status status="PASS" start="2026-04-18T03:38:51.070089" elapsed="0.000199"/>
</branch>
<status status="PASS" start="2026-04-18T03:38:51.070067" elapsed="0.000246"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:38:51.070474" elapsed="0.000022"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with [0, 'FAIL', 'Got the excluded value.'].</doc>
<status status="PASS" start="2026-04-18T03:38:51.069686" elapsed="0.000890"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:38:51.070621" elapsed="0.000146"/>
</return>
<msg time="2026-04-18T03:38:51.070923" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:38:51.070968" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:38:51.071007" level="INFO">${result} = Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>ScalarClosures.Run_Closure_After_Replacing_First_Two_Arguments</arg>
<arg>${safe_validator}</arg>
<arg>${state}</arg>
<arg>${data}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:38:51.039605" elapsed="0.031424"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Validator failed: ${result}</value>
<status status="PASS" start="2026-04-18T03:38:51.071216" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-04-18T03:38:51.071110" elapsed="0.000169"/>
</branch>
<status status="PASS" start="2026-04-18T03:38:51.071093" elapsed="0.000210"/>
</if>
<if>
<branch type="IF" condition="${sleeps_left} &lt;= 0">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:38:51.071414" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:38:51.071379" elapsed="0.000081"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:38:51.071363" elapsed="0.000119"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-18T03:38:51.071656" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:38:51.071789" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:38:51.071755" elapsed="0.000151"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:38:51.071739" elapsed="0.000192"/>
</if>
<kw name="Sleep" owner="BuiltIn">
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-04-18T03:38:51.072072" elapsed="0.000021"/>
</kw>
<var name="${sleeps_left}">0</var>
<status status="PASS" start="2026-04-18T03:38:47.833020" elapsed="3.239106"/>
</iter>
<var>${sleeps_left}</var>
<value>${count}-1</value>
<value>-1</value>
<value>-1</value>
<status status="PASS" start="2026-04-18T03:38:47.832632" elapsed="3.239530"/>
</for>
<kw name="Fail" owner="BuiltIn">
<arg>Logic error, we should have returned before.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:38:51.072314" elapsed="0.000021"/>
</kw>
<msg time="2026-04-18T03:38:51.072551" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:38:51.072597" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:38:51.072637" level="INFO">${result} = Validator failed: Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>count=${count}</arg>
<arg>getter=${getter}</arg>
<arg>safe_validator=${safe_validator}</arg>
<arg>initial_state=${state}</arg>
<doc>Pass only if consecutively 1 times in a row with 60 between attempts: ${getter} creates data and ${safe_validator} passes. Validator updates its state even if it reports failure. Always return validator state, status and message.</doc>
<status status="PASS" start="2026-04-18T03:38:47.821268" elapsed="3.251392"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:38:51.072851" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:38:51.072746" elapsed="0.000148"/>
</branch>
<status status="PASS" start="2026-04-18T03:38:51.072729" elapsed="0.000187"/>
</if>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:38:51.074232" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:38:51.074313" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:38:51.073956" elapsed="0.000424">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:38:51.074482" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:38:51.074540" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:38:51.073583" elapsed="0.000982"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:38:51.074748" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:38:51.074640" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-18T03:38:51.074621" elapsed="0.000194"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:38:51.075221" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:38:51.074965" elapsed="0.000284"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:38:51.078403" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:38:51.078478" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:38:51.075833" elapsed="0.002720">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:38:51.078658" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:38:51.078700" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:38:51.075469" elapsed="0.003254"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:38:51.078904" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-18T03:38:51.078798" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-04-18T03:38:51.078779" elapsed="0.000209"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:38:51.079136" elapsed="0.000021"/>
</kw>
<arg>${result}</arg>
<arg>Not possible to succeed within the deadline.</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:38:51.073186" elapsed="0.006100"/>
</kw>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:38:51.080578" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:38:51.080651" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:38:51.080304" elapsed="0.000405">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:38:51.080808" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:38:51.080850" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:38:51.079966" elapsed="0.000906"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:38:51.081051" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:38:51.080945" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-04-18T03:38:51.080927" elapsed="0.000191"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:38:51.081512" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:38:51.081265" elapsed="0.000289"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:38:51.084472" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:38:51.084560" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:38:51.082055" elapsed="0.002564">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:38:51.084760" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:38:51.084803" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:38:51.081722" elapsed="0.003104"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:38:51.085006" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-18T03:38:51.084899" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-04-18T03:38:51.084881" elapsed="0.000331"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:38:51.085358" elapsed="0.000022"/>
</kw>
<arg>${result}</arg>
<arg>Getter failed</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:38:51.079592" elapsed="0.005917"/>
</kw>
<kw name="Sleep" owner="BuiltIn">
<msg time="2026-04-18T03:39:51.086509" level="INFO">Slept 1 minute.</msg>
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="PASS" start="2026-04-18T03:38:51.085679" elapsed="60.001413"/>
</kw>
<var name="${try}">15</var>
<status status="PASS" start="2026-04-18T03:38:47.819849" elapsed="63.267415"/>
</iter>
<iter>
<kw name="Getter_And_Safe_Stateful_Validator_Have_To_Succeed_Consecutively_By_Deadline" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:39:51.092017" level="INFO">${result} = No result yet.</msg>
<var>${result}</var>
<arg>No result yet.</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:39:51.091278" elapsed="0.000858"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:39:51.093094" level="INFO">${state} = 0</msg>
<var>${state}</var>
<arg>${initial_state}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:39:51.092499" elapsed="0.000632"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:39:51.093895" level="INFO">${sleeps} = 0</msg>
<var>${sleeps}</var>
<arg>${count} - 1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:39:51.093362" elapsed="0.000573"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:39:51.096471" level="INFO">${date_now} = 2026-04-18 03:39:51.096</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:39:51.096200" elapsed="0.000310"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:39:51.097382" level="INFO">${time_deadline} = 23.069</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:39:51.096783" elapsed="0.000649"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:39:51.098462" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:39:51.097748" elapsed="0.000764"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:39:51.099189" elapsed="0.000040"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:39:51.098684" elapsed="0.000610"/>
</branch>
<status status="PASS" start="2026-04-18T03:39:51.098641" elapsed="0.000699"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:39:51.094866" elapsed="0.004569"/>
</kw>
<msg time="2026-04-18T03:39:51.099654" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:39:51.099745" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:39:51.094172" elapsed="0.005619"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:39:51.100199" elapsed="0.000032"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:39:51.099945" elapsed="0.000351"/>
</branch>
<status status="PASS" start="2026-04-18T03:39:51.099908" elapsed="0.000426"/>
</if>
<for flavor="IN RANGE">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_As_Is" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:39:51.103979" level="INFO">${keyword} = Get_Ipv4_Topology_Count</msg>
<msg time="2026-04-18T03:39:51.104026" level="INFO">${args} = []</msg>
<msg time="2026-04-18T03:39:51.104118" level="INFO">${kwargs} = {'session': 'operational', 'topology': 'example-ipv4-topology'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:39:51.103601" elapsed="0.000544"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Get_Ipv4_Topology_Count" owner="PrefixCounting">
<kw name="Get_Ipv4_Topology" owner="PrefixCounting">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:39:54.185328" level="INFO">GET Request : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01agv6blx930rdupfsp7wkuo902.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-18T03:39:54.199918" level="INFO">GET Response : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Transfer-Encoding': 'chunked'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xmlns="urn:opendaylight:params:xml:ns:yang:odl-bgp-topology-types"/&gt;&lt;/topology-types&gt;&lt;node&gt;&lt;node-id&gt;192.0.2.1&lt;/node-id&gt;&lt;igp-node-attributes xmlns="urn:TBD:params:xml:ns:yang:nt:l3-unicast-igp-topology"&gt;&lt;prefix&gt;&lt;prefix&gt;8.20.15.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.65.76.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.222.18.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.234.69.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.59.125.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.205.46.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.69.249.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.243.186.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.86.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.138.152.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.201.33.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.107.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.133.25.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.19.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.45.49.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.194.22.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.226.161.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.211.127.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.100.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.254.101.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.205.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.60.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.234.208.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.228.239.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.27.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.177.154.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.201.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.148.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.160.202.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.48.218.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.52.93.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.93.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.182.185.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.34.217.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.116.158.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.236.169.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.223.35.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.103.82.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.7.2.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.131.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.40.95.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.244.132.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.28.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.253.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.83.39.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.4.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.193.28.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.36.83.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.143.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.73.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.128.217.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.135.39.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.6.81.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.78.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.54.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.250.105.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.110.78.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.182.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.4.223.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.49.100.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.5.205.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.165.63.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.36.184.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.214.36.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.171.128.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.208.52.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.113.57.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.3.37.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.237.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.160.220.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.198.13.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.174.151.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.48.34.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.21.1.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.1.30.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.108.237.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.89.117.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.218.102.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.24.70.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.41.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.48.122.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.51.175.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.79.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.25.67.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.153.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.219.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.88.115.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.129.239.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.117.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.204.169.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.10.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.139.169.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.79.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.53.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.31.83.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.117.152.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.46.66.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.86.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.3.214.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.74.90.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.197.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.54.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.41.3.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.97.95.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.179.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.188.172.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.219.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.124.44.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.187.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.197.228.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.87.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.133.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.78.124.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.149.209.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.33.23.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.243.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.189.185.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.80.206.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.150.251.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.208.98.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.125.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.213.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.71.27.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.234.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.109.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.112.121.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.8.69.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.201.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.203.154.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.73.19.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.169.175.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.15.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.4.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.75.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.68.155.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.16.40.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.231.11.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.85.57.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.191.139.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.191.228.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.75.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.3.166.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.32.247.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.242.134.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.184.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.164.222.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.35.248.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.209.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.60.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.129.2.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.88.147.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.222.193.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.58.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.61.198.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.32.165.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.120.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.251.232.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.111.147.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.203.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.161.229.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.68.153.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.105.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.252.41.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.2.231.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.240.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.146.121.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.92.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.151.79.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.10.14.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.95.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.155.232.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.32.13.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.92.229.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.102.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.118.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.83.215.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.38.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.110.203.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.240.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.116.31.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.238.174.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.235.83.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.4.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.122.151.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.21.216.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.146.154.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.199.188.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.194.94.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.153.168.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.255.64.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.22.16/28&lt;/pref... (set the log level to DEBUG or TRACE to see the full content) 
 </msg>
<msg time="2026-04-18T03:39:54.204151" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${PC_NW_TOPOLOGY}=${topology}?content=nonconfig</arg>
<arg>expected_status=anything</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-18T03:39:51.107374" elapsed="3.096859"/>
</kw>
<if>
<branch type="IF" condition="${response.status_code} != 200">
<kw name="Fail" owner="BuiltIn">
<arg>Get on ${topology} returned status code ${response.status_code} with message: ${response.text}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:39:54.207439" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:39:54.204532" elapsed="0.002989"/>
</branch>
<status status="PASS" start="2026-04-18T03:39:54.204438" elapsed="0.003150"/>
</if>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-18T03:39:54.207696" elapsed="0.000079"/>
</return>
<msg time="2026-04-18T03:39:54.221370" level="INFO">${topology} = &lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xml...</msg>
<var>${topology}</var>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>GET the example-ipv4-topology data, check status is 200, return the topology data.</doc>
<status status="PASS" start="2026-04-18T03:39:51.106324" elapsed="3.115163"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:39:54.321025" level="INFO">${prefix_count} = 0</msg>
<var>${prefix_count}</var>
<arg>len(re.findall('"prefix":"', '''${topology}'''))</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:39:54.221875" elapsed="0.099279"/>
</kw>
<return>
<value>${prefix_count}</value>
<status status="PASS" start="2026-04-18T03:39:54.321314" elapsed="0.000071"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Get topology. If not fail, return number of prefixes in the topology.</doc>
<status status="PASS" start="2026-04-18T03:39:51.104928" elapsed="3.216881"/>
</kw>
<msg time="2026-04-18T03:39:54.321942" level="INFO">${result} = 0</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:39:51.104326" elapsed="3.217651"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:39:54.322049" elapsed="0.000040"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure without affecting arguments.</doc>
<status status="PASS" start="2026-04-18T03:39:51.103205" elapsed="3.219019"/>
</kw>
<msg time="2026-04-18T03:39:54.322359" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:39:54.322421" level="INFO">${message} = 0</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:39:51.102548" elapsed="3.219905"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:39:54.322770" elapsed="0.029849"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:39:54.353650" elapsed="0.000037"/>
</return>
<status status="PASS" start="2026-04-18T03:39:54.353494" elapsed="0.000227"/>
</branch>
<status status="PASS" start="2026-04-18T03:39:54.353468" elapsed="0.000279"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:39:54.353916" elapsed="0.000023"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with 0.</doc>
<status status="PASS" start="2026-04-18T03:39:54.353071" elapsed="0.000930"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:39:54.354046" elapsed="0.000027"/>
</return>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:39:51.101953" elapsed="3.252220"/>
</kw>
<msg time="2026-04-18T03:39:54.354274" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:39:54.354322" level="INFO">${data} = 0</msg>
<var>${status}</var>
<var>${data}</var>
<arg>ScalarClosures.Run_Keyword_And_Collect_Garbage</arg>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:39:51.101309" elapsed="3.253037"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Getter failed: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:39:54.354538" elapsed="0.000028"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:39:54.354425" elapsed="0.000178"/>
</branch>
<status status="PASS" start="2026-04-18T03:39:54.354406" elapsed="0.000220"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:39:54.356160" level="INFO">${date_now} = 2026-04-18 03:39:54.356</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:39:54.355980" elapsed="0.000208"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:39:54.356757" level="INFO">${time_deadline} = 19.809</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:39:54.356353" elapsed="0.000431"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:39:54.357343" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:39:54.356949" elapsed="0.000422"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:39:54.357713" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:39:54.357442" elapsed="0.000326"/>
</branch>
<status status="PASS" start="2026-04-18T03:39:54.357423" elapsed="0.000369"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:39:54.355293" elapsed="0.002545"/>
</kw>
<msg time="2026-04-18T03:39:54.357937" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:39:54.357983" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:39:54.354790" elapsed="0.003217"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:39:54.358276" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:39:54.358166" elapsed="0.000163"/>
</branch>
<status status="PASS" start="2026-04-18T03:39:54.358147" elapsed="0.000204"/>
</if>
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_After_Replacing_First_Two_Arguments" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:39:54.360473" level="INFO">${keyword} = WaitUtils.Excluding_Stability_Safe_Stateful_Validator_As_Keyword</msg>
<msg time="2026-04-18T03:39:54.360524" level="INFO">${args} = [0, 0]</msg>
<msg time="2026-04-18T03:39:54.360600" level="INFO">${kwargs} = {'excluded_value': '0'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:39:54.360134" elapsed="0.000492"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>0</arg>
<arg>${arg1}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:39:54.360794" elapsed="0.000213"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>1</arg>
<arg>${arg2}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:39:54.361167" elapsed="0.000193"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Excluding_Stability_Safe_Stateful_Validator_As_Keyword" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:39:54.363193" level="INFO">${new_state} = 0</msg>
<var>${new_state}</var>
<arg>${data}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:39:54.362774" elapsed="0.000447"/>
</kw>
<if>
<branch type="IF" condition="${data} == ${excluded_value}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Got the excluded value.</value>
<status status="PASS" start="2026-04-18T03:39:54.363485" elapsed="0.000037"/>
</return>
<status status="PASS" start="2026-04-18T03:39:54.363293" elapsed="0.000304"/>
</branch>
<status status="PASS" start="2026-04-18T03:39:54.363274" elapsed="0.000357"/>
</if>
<if>
<branch type="IF" condition="${data} != ${old_state}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Data value has changed.</value>
<status status="NOT RUN" start="2026-04-18T03:39:54.363752" elapsed="0.000233"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:39:54.363705" elapsed="0.000324"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:39:54.363683" elapsed="0.000368"/>
</if>
<return>
<value>${new_state}</value>
<value>PASS</value>
<value>Validated stable: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:39:54.364084" elapsed="0.000015"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Report failure if got the excluded value or if data value changed from last time. Useful to become validator.</doc>
<status status="PASS" start="2026-04-18T03:39:54.362245" elapsed="0.001965"/>
</kw>
<msg time="2026-04-18T03:39:54.364296" level="INFO">${result} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:39:54.361532" elapsed="0.002789"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:39:54.364370" elapsed="0.000027"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure with replaced first two positional arguments.</doc>
<status status="PASS" start="2026-04-18T03:39:54.359727" elapsed="0.004764"/>
</kw>
<msg time="2026-04-18T03:39:54.364606" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:39:54.364653" level="INFO">${message} = [0, 'FAIL', 'Got the excluded value.']</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:39:54.359082" elapsed="0.005594"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:39:54.364845" elapsed="0.026735"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:39:54.392629" elapsed="0.000036"/>
</return>
<status status="PASS" start="2026-04-18T03:39:54.392474" elapsed="0.000224"/>
</branch>
<status status="PASS" start="2026-04-18T03:39:54.392428" elapsed="0.000296"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:39:54.392889" elapsed="0.000023"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with [0, 'FAIL', 'Got the excluded value.'].</doc>
<status status="PASS" start="2026-04-18T03:39:54.392035" elapsed="0.000937"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:39:54.393018" elapsed="0.000029"/>
</return>
<msg time="2026-04-18T03:39:54.393193" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:39:54.393241" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:39:54.393282" level="INFO">${result} = Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>ScalarClosures.Run_Closure_After_Replacing_First_Two_Arguments</arg>
<arg>${safe_validator}</arg>
<arg>${state}</arg>
<arg>${data}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:39:54.358605" elapsed="0.034700"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Validator failed: ${result}</value>
<status status="PASS" start="2026-04-18T03:39:54.393496" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-18T03:39:54.393388" elapsed="0.000193"/>
</branch>
<status status="PASS" start="2026-04-18T03:39:54.393370" elapsed="0.000237"/>
</if>
<if>
<branch type="IF" condition="${sleeps_left} &lt;= 0">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:39:54.393699" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:39:54.393662" elapsed="0.000083"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:39:54.393647" elapsed="0.000121"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-18T03:39:54.393928" elapsed="0.000023"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:39:54.394085" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:39:54.394038" elapsed="0.000173"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:39:54.394016" elapsed="0.000220"/>
</if>
<kw name="Sleep" owner="BuiltIn">
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-04-18T03:39:54.394382" elapsed="0.000022"/>
</kw>
<var name="${sleeps_left}">0</var>
<status status="PASS" start="2026-04-18T03:39:51.101122" elapsed="3.293316"/>
</iter>
<var>${sleeps_left}</var>
<value>${count}-1</value>
<value>-1</value>
<value>-1</value>
<status status="PASS" start="2026-04-18T03:39:51.100412" elapsed="3.294061"/>
</for>
<kw name="Fail" owner="BuiltIn">
<arg>Logic error, we should have returned before.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:39:54.394647" elapsed="0.000022"/>
</kw>
<msg time="2026-04-18T03:39:54.394875" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:39:54.394921" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:39:54.394962" level="INFO">${result} = Validator failed: Got the excluded value.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>count=${count}</arg>
<arg>getter=${getter}</arg>
<arg>safe_validator=${safe_validator}</arg>
<arg>initial_state=${state}</arg>
<doc>Pass only if consecutively 1 times in a row with 60 between attempts: ${getter} creates data and ${safe_validator} passes. Validator updates its state even if it reports failure. Always return validator state, status and message.</doc>
<status status="PASS" start="2026-04-18T03:39:51.089296" elapsed="3.305690"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:39:54.395182" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:39:54.395074" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-18T03:39:54.395056" elapsed="0.000191"/>
</if>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:39:54.396716" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:39:54.396801" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:39:54.396334" elapsed="0.000537">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:39:54.396974" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:39:54.397017" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:39:54.395937" elapsed="0.001102"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:39:54.397222" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:39:54.397113" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-18T03:39:54.397095" elapsed="0.000193"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:39:54.397715" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:39:54.397439" elapsed="0.000305"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:39:54.400869" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:39:54.400948" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:39:54.398248" elapsed="0.002760">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:39:54.401111" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:39:54.401154" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:39:54.397910" elapsed="0.003268"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:39:54.401362" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-18T03:39:54.401253" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-04-18T03:39:54.401234" elapsed="0.000211"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:39:54.401612" elapsed="0.000023"/>
</kw>
<arg>${result}</arg>
<arg>Not possible to succeed within the deadline.</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:39:54.395522" elapsed="0.006245"/>
</kw>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:39:54.403058" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:39:54.403132" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:39:54.402794" elapsed="0.000396">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:39:54.403289" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:39:54.403331" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:39:54.402430" elapsed="0.000923"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:39:54.403539" elapsed="0.000242"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:39:54.403427" elapsed="0.000391"/>
</branch>
<status status="PASS" start="2026-04-18T03:39:54.403408" elapsed="0.000434"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:39:54.404248" level="INFO">@{message_chunks} = [ Validator failed: Got the excluded value. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:39:54.403997" elapsed="0.000277"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:39:54.407247" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:39:54.407321" level="FAIL">'Validator failed: Got the excluded value.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:39:54.404858" elapsed="0.002521">'Validator failed: Got the excluded value.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:39:54.407516" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:39:54.407578" level="INFO">${result} = 'Validator failed: Got the excluded value.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:39:54.404439" elapsed="0.003164"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:39:54.407785" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-18T03:39:54.407678" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-04-18T03:39:54.407659" elapsed="0.000210"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:39:54.408049" elapsed="0.000023"/>
</kw>
<arg>${result}</arg>
<arg>Getter failed</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:39:54.402051" elapsed="0.006152"/>
</kw>
<kw name="Sleep" owner="BuiltIn">
<msg time="2026-04-18T03:40:54.408942" level="INFO">Slept 1 minute.</msg>
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="PASS" start="2026-04-18T03:39:54.408354" elapsed="60.000896"/>
</kw>
<var name="${try}">16</var>
<status status="PASS" start="2026-04-18T03:39:51.087865" elapsed="63.321512"/>
</iter>
<iter>
<kw name="Getter_And_Safe_Stateful_Validator_Have_To_Succeed_Consecutively_By_Deadline" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:40:54.414304" level="INFO">${result} = No result yet.</msg>
<var>${result}</var>
<arg>No result yet.</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:40:54.413559" elapsed="0.000843"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:40:54.415579" level="INFO">${state} = 0</msg>
<var>${state}</var>
<arg>${initial_state}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:40:54.414868" elapsed="0.000773"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:40:54.416824" level="INFO">${sleeps} = 0</msg>
<var>${sleeps}</var>
<arg>${count} - 1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:40:54.416010" elapsed="0.000874"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:40:54.420073" level="INFO">${date_now} = 2026-04-18 03:40:54.420</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:40:54.419887" elapsed="0.000213"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:40:54.420681" level="INFO">${time_deadline} = -40.255</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:40:54.420261" elapsed="0.000447"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:40:54.421277" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:40:54.420875" elapsed="0.000429"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-18T03:40:54.422002" level="FAIL">Not possible to succeed within the deadline. Last result: No result yet.</msg>
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-18T03:40:54.421662" elapsed="0.000415">Not possible to succeed within the deadline. Last result: No result yet.</status>
</kw>
<status status="FAIL" start="2026-04-18T03:40:54.421385" elapsed="0.000764">Not possible to succeed within the deadline. Last result: No result yet.</status>
</branch>
<status status="FAIL" start="2026-04-18T03:40:54.421360" elapsed="0.000824">Not possible to succeed within the deadline. Last result: No result yet.</status>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="FAIL" start="2026-04-18T03:40:54.418336" elapsed="0.003948">Not possible to succeed within the deadline. Last result: No result yet.</status>
</kw>
<msg time="2026-04-18T03:40:54.422398" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:40:54.422449" level="INFO">${message} = Not possible to succeed within the deadline. Last result: No result yet.</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:40:54.417265" elapsed="0.005229"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:40:54.422759" elapsed="0.000033"/>
</return>
<status status="PASS" start="2026-04-18T03:40:54.422632" elapsed="0.000201"/>
</branch>
<status status="PASS" start="2026-04-18T03:40:54.422610" elapsed="0.000247"/>
</if>
<for flavor="IN RANGE">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${data}</var>
<arg>ScalarClosures.Run_Keyword_And_Collect_Garbage</arg>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-18T03:40:54.423301" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Getter failed: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:40:54.423436" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:40:54.423398" elapsed="0.000085"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:40:54.423381" elapsed="0.000124"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-18T03:40:54.423685" elapsed="0.000023"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:40:54.423822" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:40:54.423787" elapsed="0.000080"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:40:54.423770" elapsed="0.000118"/>
</if>
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>ScalarClosures.Run_Closure_After_Replacing_First_Two_Arguments</arg>
<arg>${safe_validator}</arg>
<arg>${state}</arg>
<arg>${data}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="NOT RUN" start="2026-04-18T03:40:54.424213" elapsed="0.000029"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Validator failed: ${result}</value>
<status status="NOT RUN" start="2026-04-18T03:40:54.424360" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:40:54.424324" elapsed="0.000088"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:40:54.424307" elapsed="0.000153"/>
</if>
<if>
<branch type="IF" condition="${sleeps_left} &lt;= 0">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:40:54.424593" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:40:54.424554" elapsed="0.000087"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:40:54.424519" elapsed="0.000144"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-18T03:40:54.424820" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:40:54.424955" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:40:54.424921" elapsed="0.000083"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:40:54.424903" elapsed="0.000145"/>
</if>
<kw name="Sleep" owner="BuiltIn">
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-04-18T03:40:54.425226" elapsed="0.000025"/>
</kw>
<var name="${sleeps_left}"/>
<status status="NOT RUN" start="2026-04-18T03:40:54.423150" elapsed="0.002136"/>
</iter>
<var>${sleeps_left}</var>
<value>${count}-1</value>
<value>-1</value>
<value>-1</value>
<status status="NOT RUN" start="2026-04-18T03:40:54.422900" elapsed="0.002413"/>
</for>
<kw name="Fail" owner="BuiltIn">
<arg>Logic error, we should have returned before.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:40:54.425468" elapsed="0.000020"/>
</kw>
<msg time="2026-04-18T03:40:54.425710" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:40:54.425756" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:40:54.425796" level="INFO">${result} = Not possible to succeed within the deadline. Last result: No result yet.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>count=${count}</arg>
<arg>getter=${getter}</arg>
<arg>safe_validator=${safe_validator}</arg>
<arg>initial_state=${state}</arg>
<doc>Pass only if consecutively 1 times in a row with 60 between attempts: ${getter} creates data and ${safe_validator} passes. Validator updates its state even if it reports failure. Always return validator state, status and message.</doc>
<status status="PASS" start="2026-04-18T03:40:54.411770" elapsed="0.014049"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:40:54.426034" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:40:54.425907" elapsed="0.000172"/>
</branch>
<status status="PASS" start="2026-04-18T03:40:54.425890" elapsed="0.000211"/>
</if>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:40:54.427468" level="INFO">Length is 72.</msg>
<msg time="2026-04-18T03:40:54.427563" level="FAIL">'Not possible to succeed within the deadline. Last result: No result yet.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:40:54.427188" elapsed="0.000436">'Not possible to succeed within the deadline. Last result: No result yet.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:40:54.427725" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:40:54.427768" level="INFO">${result} = 'Not possible to succeed within the deadline. Last result: No result yet.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:40:54.426842" elapsed="0.000949"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:40:54.427975" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:40:54.427865" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-18T03:40:54.427846" elapsed="0.000195"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:40:54.428481" level="INFO">@{message_chunks} = [  |  Last result: No result yet. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:40:54.428191" elapsed="0.000322"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:40:54.431699" level="INFO">Length is 0.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="PASS" start="2026-04-18T03:40:54.429045" elapsed="0.002701"/>
</kw>
<msg time="2026-04-18T03:40:54.431841" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:40:54.431884" level="INFO">${result} = None</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:40:54.428701" elapsed="0.003206"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="NOT RUN" start="2026-04-18T03:40:54.432088" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:40:54.431981" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-04-18T03:40:54.431963" elapsed="0.000190"/>
</if>
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-18T03:40:54.432635" level="FAIL">Not possible to succeed within the deadline. Last result: No result yet.</msg>
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-18T03:40:54.432299" elapsed="0.000399">Not possible to succeed within the deadline. Last result: No result yet.</status>
</kw>
<arg>${result}</arg>
<arg>Not possible to succeed within the deadline.</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="FAIL" start="2026-04-18T03:40:54.426369" elapsed="0.006430">Not possible to succeed within the deadline. Last result: No result yet.</status>
</kw>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<arg>${result}</arg>
<arg>Getter failed</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="NOT RUN" start="2026-04-18T03:40:54.433088" elapsed="0.000061"/>
</kw>
<kw name="Sleep" owner="BuiltIn">
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-04-18T03:40:54.433307" elapsed="0.000021"/>
</kw>
<var name="${try}">17</var>
<status status="FAIL" start="2026-04-18T03:40:54.409978" elapsed="0.023400">Not possible to succeed within the deadline. Last result: No result yet.</status>
</iter>
<var>${try}</var>
<value>1</value>
<value>${maximum_sleeps}+2</value>
<status status="FAIL" start="2026-04-18T03:23:54.167910" elapsed="1020.265525">Not possible to succeed within the deadline. Last result: No result yet.</status>
</for>
<kw name="Fail" owner="BuiltIn">
<arg>Logic error, we should have returned before.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:40:54.433616" elapsed="0.000040"/>
</kw>
<var>${result}</var>
<arg>timeout=${timeout}</arg>
<arg>period=${period}</arg>
<arg>count=${repetitions}</arg>
<arg>getter=${getter}</arg>
<arg>safe_validator=${validator}</arg>
<arg>initial_state=${excluded_count}</arg>
<doc>Analogue of Wait Until Keyword Succeeds, but it passes state of validator around and exits early on getter failure. Calls GASSVHTSCBD to verify data is "stable".</doc>
<status status="FAIL" start="2026-04-18T03:23:54.160540" elapsed="1020.273226">Not possible to succeed within the deadline. Last result: No result yet.</status>
</kw>
<return>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:40:54.433842" elapsed="0.000017"/>
</return>
<arg>timeout=${bgp_filling_timeout}</arg>
<arg>period=${CHECK_PERIOD_PREFIX_COUNT_SINGLE}</arg>
<arg>repetitions=${REPETITIONS_PREFIX_COUNT_SINGLE}</arg>
<arg>excluded_count=0</arg>
<doc>Each ${period} get prefix count. When called with shard list, the check is done before the count is get. After 1 of stable different from ${excluded_count} within ${timeout}, Return validator output. Fail early on getter error.</doc>
<status status="FAIL" start="2026-04-18T03:23:54.152037" elapsed="1020.281905">Not possible to succeed within the deadline. Last result: No result yet.</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-04-18T03:40:54.435369" 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-04-18T03:40:54.435051" elapsed="0.000361"/>
</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-04-18T03:40:54.434668" elapsed="0.000795"/>
</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-04-18T03:40:54.436378" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:40:54.435987" elapsed="0.000480"/>
</branch>
<status status="PASS" start="2026-04-18T03:40:54.435969" elapsed="0.000526"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>'${SetupUtils__Known_Bug_ID}' != ''</arg>
<arg>Set_Known_Bug_Id</arg>
<arg>${EMPTY}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:40:54.436669" elapsed="0.000324"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:40:54.442177" level="INFO">${test_skipped} = False</msg>
<var>${test_skipped}</var>
<arg>len(re.findall('SKIPPED', """${TEST_MESSAGE}""")) &gt; 0</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:40:54.441727" elapsed="0.000488"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="NOT RUN" start="2026-04-18T03:40:54.442446" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:40:54.442294" elapsed="0.000193"/>
</branch>
<status status="PASS" start="2026-04-18T03:40:54.442274" elapsed="0.000234"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:40:54.443116" level="INFO">${newline} = 
</msg>
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:40:54.442743" elapsed="0.000401"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-18T03:40:54.443599" level="INFO">${reference} = bgpcep_bgp_ingest_mixed_txt_Singlepeer_Prefixcount_Wait_For_Stable_Listening_Ipv4_Topology</msg>
<var>${reference}</var>
<arg>${SUITE_NAME}_${TEST_NAME}</arg>
<arg>[ /\.-]</arg>
<arg>_</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-18T03:40:54.443311" elapsed="0.000315"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<msg time="2026-04-18T03:40:54.443967" level="INFO">${reference} = bgpcep_bgp_ingest_mixed_txt_singlepeer_prefixcount_wait_for_stable_listening_ipv4_topology</msg>
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="PASS" start="2026-04-18T03:40:54.443788" elapsed="0.000205"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:40:54.444495" level="INFO">${msg} = ... click for list of related bugs or create a new one if needed (with the
"bgpcep_bgp_ingest_mixed_txt_singlepeer_prefixcount_wait_for_stable_listening_ipv4_topology"
reference somewhere inside)</msg>
<var>${msg}</var>
<arg>... click for list of related bugs or create a new one if needed (with the${newline}"${reference}"${newline}reference somewhere inside)</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:40:54.444149" elapsed="0.000373"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:40:54.445060" level="INFO">${bugs} = "https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=bgpcep_bgp_ingest_mixed_txt_singlepeer_prefixcount_wait_for_stable_listening_ipv4_topology&amp;order=bug_status"</msg>
<var>${bugs}</var>
<arg>"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=${reference}&amp;order=bug_status"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:40:54.444722" elapsed="0.000367"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<msg time="2026-04-18T03:40:54.445715" level="INFO">Set test message to:
... click for list of related bugs or create a new one if needed (with the
"bgpcep_bgp_ingest_mixed_txt_singlepeer_prefixcount_wait_for_stable_listening_ipv4_topology"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=bgpcep_bgp_ingest_mixed_txt_singlepeer_prefixcount_wait_for_stable_listening_ipv4_topology&amp;order=bug_status"

Not possible to succeed within the deadline. Last result: No result yet.</msg>
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="PASS" start="2026-04-18T03:40:54.445249" elapsed="0.000558"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:40:54.446323" level="INFO">... click for list of related bugs or create a new one if needed (with the
"bgpcep_bgp_ingest_mixed_txt_singlepeer_prefixcount_wait_for_stable_listening_ipv4_topology"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=bgpcep_bgp_ingest_mixed_txt_singlepeer_prefixcount_wait_for_stable_listening_ipv4_topology&amp;order=bug_status"</msg>
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:40:54.445970" elapsed="0.000412"/>
</kw>
<doc>Report that a test failed and point to linked Bugzilla bug(s).
Linked bugs must contain the ${reference} inside comments (workaround
becasue of currently missing suitable field for external references and
not correctly working the CONTENT MATCHES filter).
Not FAILED (incl. SKIPPED) test are not reported.
This keyword must be used in the [Teardown] setting of the affected test
or as the first line of the test if FastFail module is not being
used. It reports the URL of the bug on console and also puts it
into the Robot log file.</doc>
<status status="PASS" start="2026-04-18T03:40:54.441379" elapsed="0.005060"/>
</kw>
<status status="PASS" start="2026-04-18T03:40:54.435740" elapsed="0.010748"/>
</kw>
<doc>Test case teardown. Show linked bugs and start fast failing in case of failure.</doc>
<status status="PASS" start="2026-04-18T03:40:54.434278" elapsed="0.012283"/>
</kw>
<doc>Wait until example-ipv4-topology becomes stable.</doc>
<status status="FAIL" start="2026-04-18T03:23:54.041439" elapsed="1020.405174">... click for list of related bugs or create a new one if needed (with the
"bgpcep_bgp_ingest_mixed_txt_singlepeer_prefixcount_wait_for_stable_listening_ipv4_topology"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=bgpcep_bgp_ingest_mixed_txt_singlepeer_prefixcount_wait_for_stable_listening_ipv4_topology&amp;order=bug_status"

Not possible to succeed within the deadline. Last result: No result yet.</status>
</test>
<test id="s1-s2-t13" name="Check_Listening_Ipv4_Topology_Count" line="183">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-18T03:40:54.450321" elapsed="0.000251"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-18T03:40:54.450051" elapsed="0.000586"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:40:54.451692" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:40:54.451565" elapsed="0.000174"/>
</branch>
<status status="PASS" start="2026-04-18T03:40:54.451518" elapsed="0.000243"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:40:54.456631" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:40:54.456506" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-04-18T03:40:54.456488" elapsed="0.000211"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-18T03:40:54.457709" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-18T03:40:54.457307" elapsed="0.000430"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-18T03:40:54.458194" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-18T03:40:54.457900" elapsed="0.000320"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-18T03:40:54.458264" elapsed="0.000032"/>
</return>
<msg time="2026-04-18T03:40:54.458421" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-18T03:40:54.456932" elapsed="0.001514"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:40:54.463805" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:40:54.463699" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-18T03:40:54.463679" elapsed="0.000194"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:40:54.465069" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:40:54.464962" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-18T03:40:54.464945" elapsed="0.000195"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-18T03:40:54.465618" level="INFO">${karaf_connection_index} = 4</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-18T03:40:54.465292" elapsed="0.000353"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-18T03:40:54.466029" level="INFO">${current_connection_index} = 7</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:40:54.465807" elapsed="0.000248"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-18T03:40:54.562774" 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 "b "g "p "c "e "p "- "b "g "p "- "i "n "g "e "s "t "[78C- "[A[78Cm</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-18T03:40:54.466596" elapsed="0.096368"/>
</kw>
<msg time="2026-04-18T03:40:54.563181" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-18T03:40:54.563229" 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 "b "g "p "c "e "p "- "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:40:54.466215" elapsed="0.097052"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-18T03:40:54.649296" level="INFO">"i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "C "h "e "c "k "_ "L "i "s "t "e "n "i "n "g "_ "I "p "v "4 "_ "T "o "p "o "l "o "g "y "_ "C "o "u "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-04-18T03:40:54.564230" elapsed="0.085240"/>
</kw>
<msg time="2026-04-18T03:40:54.649720" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-18T03:40:54.649775" level="INFO">${message_wait} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "C "h "e "c "k "_ "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-04-18T03:40:54.563605" elapsed="0.086208"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:40:54.650219" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:40:54.649927" elapsed="0.000350"/>
</branch>
<status status="PASS" start="2026-04-18T03:40:54.649891" elapsed="0.000415"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:40:54.650892" level="INFO"> "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "C "h "e "c "k "_ "L "i "s "t "e "n "i "n "g "_ "I "p "v "4 "_ "T "o "p "o "l "o "g "y "_ "C "o "u "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-04-18T03:40:54.650467" 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-04-18T03:40:54.651263" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:40:54.651040" elapsed="0.000278"/>
</branch>
<status status="PASS" start="2026-04-18T03:40:54.651021" elapsed="0.000322"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-18T03:40:54.651381" elapsed="0.000039"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:40:54.654203" elapsed="0.000157"/>
</kw>
<msg time="2026-04-18T03:40:54.654440" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:40:54.653016" elapsed="0.001588"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="NOT RUN" start="2026-04-18T03:40:54.655183" elapsed="0.000124"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:40:54.655626" elapsed="0.000084"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-18T03:40:54.652307" elapsed="0.003536"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-18T03:40:54.651724" elapsed="0.004188"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-18T03:40:54.464661" elapsed="0.191359"/>
</kw>
<msg time="2026-04-18T03:40:54.656120" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:40:54.656166" level="INFO">${message} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "C "h "e "c "k "_ "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-04-18T03:40:54.464026" elapsed="0.192178"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:40:54.656431" elapsed="0.000036"/>
</return>
<status status="PASS" start="2026-04-18T03:40:54.656282" elapsed="0.000231"/>
</branch>
<status status="PASS" start="2026-04-18T03:40:54.656263" elapsed="0.000306"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:40:54.657140" elapsed="0.000028"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-18T03:40:54.657495" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:40:54.657586" elapsed="0.000016"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-18T03:40:54.463349" elapsed="0.194349"/>
</kw>
<msg time="2026-04-18T03:40:54.657792" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:40:54.657836" level="INFO">${output} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "C "h "e "c "k "_ "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-04-18T03:40:54.458849" elapsed="0.199025"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:40:54.658218" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:40:54.657951" elapsed="0.000321"/>
</branch>
<status status="PASS" start="2026-04-18T03:40:54.657933" elapsed="0.000416"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-18T03:40:54.458704" elapsed="0.199685"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-18T03:40:54.458497" elapsed="0.199937"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-18T03:40:54.456144" elapsed="0.202360"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-18T03:40:54.451248" elapsed="0.207342"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:40:54.450812" elapsed="0.207826"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-18T03:40:54.447676" elapsed="0.211017"/>
</kw>
<kw name="Check_Ipv4_Topology_Count" owner="PrefixCounting">
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get_Ipv4_Topology_Count" owner="PrefixCounting">
<kw name="Get_Ipv4_Topology" owner="PrefixCounting">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:40:57.688644" level="INFO">GET Request : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01agv6blx930rdupfsp7wkuo902.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-18T03:40:57.703669" level="INFO">GET Response : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Transfer-Encoding': 'chunked'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xmlns="urn:opendaylight:params:xml:ns:yang:odl-bgp-topology-types"/&gt;&lt;/topology-types&gt;&lt;node&gt;&lt;node-id&gt;192.0.2.1&lt;/node-id&gt;&lt;igp-node-attributes xmlns="urn:TBD:params:xml:ns:yang:nt:l3-unicast-igp-topology"&gt;&lt;prefix&gt;&lt;prefix&gt;8.20.15.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.65.76.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.222.18.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.234.69.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.59.125.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.205.46.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.69.249.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.243.186.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.86.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.138.152.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.201.33.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.107.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.133.25.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.19.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.45.49.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.194.22.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.226.161.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.211.127.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.100.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.254.101.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.205.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.60.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.234.208.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.228.239.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.27.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.177.154.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.201.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.148.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.160.202.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.48.218.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.52.93.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.93.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.182.185.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.34.217.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.116.158.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.236.169.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.223.35.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.103.82.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.7.2.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.131.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.40.95.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.244.132.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.28.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.253.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.83.39.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.4.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.193.28.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.36.83.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.143.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.73.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.128.217.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.135.39.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.6.81.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.78.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.54.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.250.105.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.110.78.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.182.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.4.223.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.49.100.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.5.205.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.165.63.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.36.184.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.214.36.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.171.128.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.208.52.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.113.57.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.3.37.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.237.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.160.220.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.198.13.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.174.151.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.48.34.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.21.1.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.1.30.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.108.237.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.89.117.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.218.102.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.24.70.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.41.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.48.122.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.51.175.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.79.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.25.67.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.153.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.219.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.88.115.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.129.239.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.117.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.204.169.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.10.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.139.169.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.79.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.53.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.31.83.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.117.152.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.46.66.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.86.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.3.214.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.74.90.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.197.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.54.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.41.3.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.97.95.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.179.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.188.172.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.219.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.124.44.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.187.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.197.228.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.87.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.133.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.78.124.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.149.209.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.33.23.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.243.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.189.185.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.80.206.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.150.251.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.208.98.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.125.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.213.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.71.27.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.234.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.109.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.112.121.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.8.69.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.201.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.203.154.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.73.19.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.169.175.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.15.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.4.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.75.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.68.155.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.16.40.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.231.11.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.85.57.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.191.139.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.191.228.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.75.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.3.166.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.32.247.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.242.134.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.184.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.164.222.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.35.248.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.209.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.60.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.129.2.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.88.147.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.222.193.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.58.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.61.198.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.32.165.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.120.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.251.232.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.111.147.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.203.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.161.229.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.68.153.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.105.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.252.41.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.2.231.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.240.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.146.121.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.92.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.151.79.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.10.14.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.95.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.155.232.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.32.13.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.92.229.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.102.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.118.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.83.215.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.38.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.110.203.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.240.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.116.31.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.238.174.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.235.83.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.4.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.122.151.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.21.216.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.146.154.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.199.188.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.194.94.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.153.168.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.255.64.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.22.16/28&lt;/pref... (set the log level to DEBUG or TRACE to see the full content) 
 </msg>
<msg time="2026-04-18T03:40:57.704159" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${PC_NW_TOPOLOGY}=${topology}?content=nonconfig</arg>
<arg>expected_status=anything</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-18T03:40:54.661768" elapsed="3.042423"/>
</kw>
<if>
<branch type="IF" condition="${response.status_code} != 200">
<kw name="Fail" owner="BuiltIn">
<arg>Get on ${topology} returned status code ${response.status_code} with message: ${response.text}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:40:57.707282" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:40:57.704327" elapsed="0.003027"/>
</branch>
<status status="PASS" start="2026-04-18T03:40:57.704295" elapsed="0.003103"/>
</if>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-18T03:40:57.707460" elapsed="0.000044"/>
</return>
<msg time="2026-04-18T03:40:57.714573" level="INFO">${topology} = &lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xml...</msg>
<var>${topology}</var>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>GET the example-ipv4-topology data, check status is 200, return the topology data.</doc>
<status status="PASS" start="2026-04-18T03:40:54.661324" elapsed="3.053309"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:40:57.805825" level="INFO">${prefix_count} = 0</msg>
<var>${prefix_count}</var>
<arg>len(re.findall('"prefix":"', '''${topology}'''))</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:40:57.714909" elapsed="0.090969"/>
</kw>
<return>
<value>${prefix_count}</value>
<status status="PASS" start="2026-04-18T03:40:57.805974" elapsed="0.000062"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Get topology. If not fail, return number of prefixes in the topology.</doc>
<status status="PASS" start="2026-04-18T03:40:54.660799" elapsed="3.145379"/>
</kw>
<msg time="2026-04-18T03:40:57.806287" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:40:57.806333" level="INFO">${message} = 0</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:40:54.660244" elapsed="3.146113"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:40:57.806609" elapsed="0.031245"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:40:57.838967" elapsed="0.000045"/>
</return>
<status status="PASS" start="2026-04-18T03:40:57.838806" elapsed="0.000251"/>
</branch>
<status status="PASS" start="2026-04-18T03:40:57.838772" elapsed="0.000314"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:40:57.839275" elapsed="0.000024"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with 0.</doc>
<status status="PASS" start="2026-04-18T03:40:57.838298" elapsed="0.001069"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:40:57.839430" elapsed="0.000033"/>
</return>
<msg time="2026-04-18T03:40:57.839632" level="INFO">${actual_count} = 0</msg>
<var>${actual_count}</var>
<arg>Get_Ipv4_Topology_Count</arg>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:40:54.659638" elapsed="3.180023"/>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<msg time="2026-04-18T03:40:57.840228" level="INFO">Argument types are:
&lt;class 'int'&gt;
&lt;class 'str'&gt;</msg>
<msg time="2026-04-18T03:40:57.840331" level="FAIL">0 != 250000</msg>
<arg>${actual_count}</arg>
<arg>${expected_count}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="FAIL" start="2026-04-18T03:40:57.839839" elapsed="0.000563">0 != 250000</status>
</kw>
<arg>${COUNT_PREFIX_COUNT_SINGLE}</arg>
<doc>Check that the count of prefixes matches the expected count. Fails if it does not. In either case, collect garbage.</doc>
<status status="FAIL" start="2026-04-18T03:40:54.659007" elapsed="3.181501">0 != 250000</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-04-18T03:40:57.841916" 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-04-18T03:40:57.841599" elapsed="0.000359"/>
</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-04-18T03:40:57.841201" elapsed="0.000809"/>
</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-04-18T03:40:57.842858" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:40:57.842443" elapsed="0.000477"/>
</branch>
<status status="PASS" start="2026-04-18T03:40:57.842425" elapsed="0.000520"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>'${SetupUtils__Known_Bug_ID}' != ''</arg>
<arg>Set_Known_Bug_Id</arg>
<arg>${EMPTY}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:40:57.843094" elapsed="0.000314"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:40:57.848512" level="INFO">${test_skipped} = False</msg>
<var>${test_skipped}</var>
<arg>len(re.findall('SKIPPED', """${TEST_MESSAGE}""")) &gt; 0</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:40:57.848091" elapsed="0.000464"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="NOT RUN" start="2026-04-18T03:40:57.848778" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:40:57.848631" elapsed="0.000188"/>
</branch>
<status status="PASS" start="2026-04-18T03:40:57.848612" elapsed="0.000228"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:40:57.849321" level="INFO">${newline} = 
</msg>
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:40:57.849018" elapsed="0.000330"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-18T03:40:57.849866" level="INFO">${reference} = bgpcep_bgp_ingest_mixed_txt_Singlepeer_Prefixcount_Check_Listening_Ipv4_Topology_Count</msg>
<var>${reference}</var>
<arg>${SUITE_NAME}_${TEST_NAME}</arg>
<arg>[ /\.-]</arg>
<arg>_</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-18T03:40:57.849508" elapsed="0.000385"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<msg time="2026-04-18T03:40:57.850234" level="INFO">${reference} = bgpcep_bgp_ingest_mixed_txt_singlepeer_prefixcount_check_listening_ipv4_topology_count</msg>
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="PASS" start="2026-04-18T03:40:57.850055" elapsed="0.000208"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:40:57.850786" level="INFO">${msg} = ... click for list of related bugs or create a new one if needed (with the
"bgpcep_bgp_ingest_mixed_txt_singlepeer_prefixcount_check_listening_ipv4_topology_count"
reference somewhere inside)</msg>
<var>${msg}</var>
<arg>... click for list of related bugs or create a new one if needed (with the${newline}"${reference}"${newline}reference somewhere inside)</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:40:57.850419" elapsed="0.000394"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:40:57.851283" level="INFO">${bugs} = "https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=bgpcep_bgp_ingest_mixed_txt_singlepeer_prefixcount_check_listening_ipv4_topology_count&amp;order=bug_status"</msg>
<var>${bugs}</var>
<arg>"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=${reference}&amp;order=bug_status"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:40:57.850973" elapsed="0.000338"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<msg time="2026-04-18T03:40:57.852008" level="INFO">Set test message to:
... click for list of related bugs or create a new one if needed (with the
"bgpcep_bgp_ingest_mixed_txt_singlepeer_prefixcount_check_listening_ipv4_topology_count"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=bgpcep_bgp_ingest_mixed_txt_singlepeer_prefixcount_check_listening_ipv4_topology_count&amp;order=bug_status"

0 != 250000</msg>
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="PASS" start="2026-04-18T03:40:57.851468" elapsed="0.000591"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:40:57.852516" level="INFO">... click for list of related bugs or create a new one if needed (with the
"bgpcep_bgp_ingest_mixed_txt_singlepeer_prefixcount_check_listening_ipv4_topology_count"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=bgpcep_bgp_ingest_mixed_txt_singlepeer_prefixcount_check_listening_ipv4_topology_count&amp;order=bug_status"</msg>
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:40:57.852217" 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-04-18T03:40:57.847777" elapsed="0.004860"/>
</kw>
<status status="PASS" start="2026-04-18T03:40:57.842231" elapsed="0.010456"/>
</kw>
<doc>Test case teardown. Show linked bugs and start fast failing in case of failure.</doc>
<status status="PASS" start="2026-04-18T03:40:57.840839" elapsed="0.011889"/>
</kw>
<doc>Count the routes in example-ipv4-topology and fail if the count is not correct.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-18T03:40:54.447063" elapsed="3.405704">... click for list of related bugs or create a new one if needed (with the
"bgpcep_bgp_ingest_mixed_txt_singlepeer_prefixcount_check_listening_ipv4_topology_count"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=bgpcep_bgp_ingest_mixed_txt_singlepeer_prefixcount_check_listening_ipv4_topology_count&amp;order=bug_status"

0 != 250000</status>
</test>
<test id="s1-s2-t14" name="Kill_Listening_BGP_Speaker" line="189">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-18T03:40:57.856168" elapsed="0.000220"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-18T03:40:57.855900" 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-04-18T03:40:57.857551" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:40:57.857419" elapsed="0.000181"/>
</branch>
<status status="PASS" start="2026-04-18T03:40:57.857401" elapsed="0.000222"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:40:57.862423" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:40:57.862316" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-18T03:40:57.862298" elapsed="0.000194"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-18T03:40:57.863494" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-18T03:40:57.863114" elapsed="0.000407"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-18T03:40:57.863999" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-18T03:40:57.863701" elapsed="0.000324"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-18T03:40:57.864070" elapsed="0.000030"/>
</return>
<msg time="2026-04-18T03:40:57.864225" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-18T03:40:57.862739" 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-04-18T03:40:57.869928" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:40:57.869818" elapsed="0.000190"/>
</branch>
<status status="PASS" start="2026-04-18T03:40:57.869799" 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-04-18T03:40:57.871258" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:40:57.871150" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-18T03:40:57.871133" elapsed="0.000194"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-18T03:40:57.871802" level="INFO">${karaf_connection_index} = 4</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-18T03:40:57.871473" elapsed="0.000356"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-18T03:40:57.872207" level="INFO">${current_connection_index} = 7</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:40:57.871988" elapsed="0.000244"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-18T03:40:57.920070" 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 "b "g "p "c "e "p "- "b "g "p "- "i "n "g "e "s "t "[78C- "[A[78Cm</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-18T03:40:57.872750" elapsed="0.047480"/>
</kw>
<msg time="2026-04-18T03:40:57.920439" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-18T03:40:57.920494" 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 "b "g "p "c "e "p "- "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:40:57.872393" elapsed="0.048164"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-18T03:40:57.957236" level="INFO">"i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "K "i "l "l "_ "L "i "s "t "e "n "i "n "g "_ "B "G "P "_ "S "p "e "a "k "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-18T03:40:57.921253" elapsed="0.036355"/>
</kw>
<msg time="2026-04-18T03:40:57.958044" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-18T03:40:57.958159" level="INFO">${message_wait} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "K "i "l "l "_ "L "i "...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:40:57.920771" elapsed="0.037481"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:40:57.959212" elapsed="0.000056"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:40:57.958514" elapsed="0.000843"/>
</branch>
<status status="PASS" start="2026-04-18T03:40:57.958451" elapsed="0.000966"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:40:57.960687" level="INFO"> "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "K "i "l "l "_ "L "i "s "t "e "n "i "n "g "_ "B "G "P "_ "S "p "e "a "k "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:40:57.959859" elapsed="0.001035"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:40:57.961441" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:40:57.961167" elapsed="0.000330"/>
</branch>
<status status="PASS" start="2026-04-18T03:40:57.961115" elapsed="0.000407"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-18T03:40:57.961581" elapsed="0.000040"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:40:57.964656" elapsed="0.000156"/>
</kw>
<msg time="2026-04-18T03:40:57.964878" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:40:57.963381" elapsed="0.001671"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="NOT RUN" start="2026-04-18T03:40:57.965375" elapsed="0.000095"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:40:57.965778" elapsed="0.000078"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-18T03:40:57.962521" elapsed="0.003456"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-18T03:40:57.961901" elapsed="0.004145"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-18T03:40:57.870832" elapsed="0.095315"/>
</kw>
<msg time="2026-04-18T03:40:57.966243" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:40:57.966300" level="INFO">${message} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "K "i "l "l "_ "L "i "...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:40:57.870190" elapsed="0.096494"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:40:57.966890" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-18T03:40:57.966773" elapsed="0.000246"/>
</branch>
<status status="PASS" start="2026-04-18T03:40:57.966752" elapsed="0.000296"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:40:57.967865" elapsed="0.000028"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-18T03:40:57.968224" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:40:57.968297" elapsed="0.000016"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-18T03:40:57.869464" elapsed="0.098944"/>
</kw>
<msg time="2026-04-18T03:40:57.968504" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:40:57.968565" level="INFO">${output} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "K "i "l "l "_ "L "i "...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:40:57.864642" elapsed="0.103963"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:40:57.968941" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:40:57.968683" elapsed="0.000338"/>
</branch>
<status status="PASS" start="2026-04-18T03:40:57.968665" elapsed="0.000381"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-18T03:40:57.864481" elapsed="0.104589"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-18T03:40:57.864304" elapsed="0.104801"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-18T03:40:57.861957" elapsed="0.107205"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-18T03:40:57.857133" elapsed="0.112086"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:40:57.856654" elapsed="0.112612"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-18T03:40:57.853754" elapsed="0.115567"/>
</kw>
<kw name="Kill_BGP_Speaker" owner="BGPSpeaker">
<kw name="Write_Bare_Ctrl_C" owner="RemoteBash">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:40:57.970816" level="INFO">${ctrl_c} = </msg>
<var>${ctrl_c}</var>
<arg>chr(int(3))</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:40:57.970241" elapsed="0.000604"/>
</kw>
<kw name="Write Bare" owner="SSHLibrary">
<arg>${ctrl_c}</arg>
<doc>Writes the given ``text`` on the remote machine without appending a newline.</doc>
<status status="PASS" start="2026-04-18T03:40:57.971005" elapsed="0.000292"/>
</kw>
<doc>Construct ctrl+c character and SSH-write it (without endline) to the current SSH connection.
Do not read anything yet.</doc>
<status status="PASS" start="2026-04-18T03:40:57.969969" elapsed="0.001388"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-18T03:40:57.989428" level="INFO">[?2004l^C
[?2004h[jenkins@releng-35801-190-1-mininet-ovs-217-0 ~]&gt;</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="PASS" start="2026-04-18T03:40:57.971905" elapsed="0.017590"/>
</kw>
<msg time="2026-04-18T03:40:57.989616" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:40:57.989660" level="INFO">${message} = [?2004l^C
[?2004h[jenkins@releng-35801-190-1-mininet-ovs-217-0 ~]&gt;</msg>
<var>${status}</var>
<var>${message}</var>
<arg>SSHLibrary.Read_Until_Prompt</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:40:57.971557" elapsed="0.018129"/>
</kw>
<kw name="Dump_BGP_Speaker_Logs" owner="BGPSpeaker">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-18T03:40:57.990314" level="INFO">Executing command 'cat play.py.out'.</msg>
<msg time="2026-04-18T03:40:58.002136" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-18T03:40:58.002282" level="INFO">${output_log} = 2026-04-18 03:23:53,769 INFO BGP-Thread-1 (job): Connecting in the listening mode.
2026-04-18 03:23:54,020 INFO BGP-Thread-1 (job): Connected to ODL.
2026-04-18 03:23:54,025 INFO BGP-Thread-1 (job): O...</msg>
<var>${output_log}</var>
<arg>cat ${BGPSpeaker__OUTPUT_LOG}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-18T03:40:57.990168" elapsed="0.012151"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:40:58.002955" level="INFO">2026-04-18 03:23:53,769 INFO BGP-Thread-1 (job): Connecting in the listening mode.
2026-04-18 03:23:54,020 INFO BGP-Thread-1 (job): Connected to ODL.
2026-04-18 03:23:54,025 INFO BGP-Thread-1 (job): Open message received.
2026-04-18 03:23:54,025 INFO BGP-Thread-1 (job): ffffffffffffffffffffffffffffffff00410104fbf000b4c000020224022241040000fbf006000200010400010001010400020001010440040047400200b44700
2026-04-18 03:23:54,026 INFO BGP-Thread-1 (job): Generator initialisation
2026-04-18 03:23:54,026 INFO BGP-Thread-1 (job):   Target total number of prefixes to be introduced: 250000
2026-04-18 03:23:54,026 INFO BGP-Thread-1 (job):   Prefix base: 8.0.1.0/28
2026-04-18 03:23:54,026 INFO BGP-Thread-1 (job):   My Autonomous System number: 64496
2026-04-18 03:23:54,026 INFO BGP-Thread-1 (job):   My Hold Time: 180
2026-04-18 03:23:54,026 INFO BGP-Thread-1 (job):   My BGP Identifier: 169782011
2026-04-18 03:23:54,026 INFO BGP-Thread-1 (job):   Next Hop: 192.0.2.1
2026-04-18 03:23:54,026 INFO BGP-Thread-1 (job):   Originator ID: None
2026-04-18 03:23:54,026 INFO BGP-Thread-1 (job):   Cluster list: None
2026-04-18 03:23:54,026 INFO BGP-Thread-1 (job):   Prefix count to be inserted at once: 10
2026-04-18 03:23:54,026 INFO BGP-Thread-1 (job):   Prefix count to be withdrawn at once: 9
2026-04-18 03:23:54,027 INFO BGP-Thread-1 (job):   Fast pre-fill up to 10 prefixes
2026-04-18 03:23:54,027 INFO BGP-Thread-1 (job):   Remaining number of prefixes to be processed in parallel with withdrawals: 249990
2026-04-18 03:23:54,027 INFO BGP-Thread-1 (job):   Common single UPDATE will be generated for both NLRI &amp; WITHDRAWN lists
2026-04-18 03:23:54,027 INFO BGP-Thread-1 (job):   Let's go ...

2026-04-18 03:23:54,029 INFO BGP-Thread-1 (job): Iteration: 0 - total remaining prefixes: 250000
2026-04-18 03:23:54,093 INFO BGP-Thread-1 (job): Iteration: 1000 - total remaining prefixes: 248991
2026-04-18 03:23:54,149 INFO BGP-Thread-1 (job): Iteration: 2000 - total remaining prefixes: 247991
2026-04-18 03:23:54,212 INFO BGP-Thread-1 (job): Iteration: 3000 - total remaining prefixes: 246991
2026-04-18 03:23:54,317 INFO BGP-Thread-1 (job): Iteration: 4000 - total remaining prefixes: 245991
2026-04-18 03:23:54,588 INFO BGP-Thread-1 (job): Iteration: 5000 - total remaining prefixes: 244991
2026-04-18 03:23:54,652 INFO BGP-Thread-1 (job): Iteration: 6000 - total remaining prefixes: 243991
2026-04-18 03:23:54,749 INFO BGP-Thread-1 (job): Iteration: 7000 - total remaining prefixes: 242991
2026-04-18 03:23:54,803 INFO BGP-Thread-1 (job): Iteration: 8000 - total remaining prefixes: 241991
2026-04-18 03:23:54,857 INFO BGP-Thread-1 (job): Iteration: 9000 - total remaining prefixes: 240991
2026-04-18 03:23:54,910 INFO BGP-Thread-1 (job): Iteration: 10000 - total remaining prefixes: 239991
2026-04-18 03:23:54,962 INFO BGP-Thread-1 (job): Iteration: 11000 - total remaining prefixes: 238991
2026-04-18 03:23:55,016 INFO BGP-Thread-1 (job): Iteration: 12000 - total remaining prefixes: 237991
2026-04-18 03:23:55,080 INFO BGP-Thread-1 (job): Iteration: 13000 - total remaining prefixes: 236991
2026-04-18 03:23:55,144 INFO BGP-Thread-1 (job): Iteration: 14000 - total remaining prefixes: 235991
2026-04-18 03:23:55,198 INFO BGP-Thread-1 (job): Iteration: 15000 - total remaining prefixes: 234991
2026-04-18 03:23:55,252 INFO BGP-Thread-1 (job): Iteration: 16000 - total remaining prefixes: 233991
2026-04-18 03:23:55,307 INFO BGP-Thread-1 (job): Iteration: 17000 - total remaining prefixes: 232991
2026-04-18 03:23:55,362 INFO BGP-Thread-1 (job): Iteration: 18000 - total remaining prefixes: 231991
2026-04-18 03:23:55,423 INFO BGP-Thread-1 (job): Iteration: 19000 - total remaining prefixes: 230991
2026-04-18 03:23:55,477 INFO BGP-Thread-1 (job): Iteration: 20000 - total remaining prefixes: 229991
2026-04-18 03:23:55,536 INFO BGP-Thread-1 (job): Iteration: 21000 - total remaining prefixes: 228991
2026-04-18 03:23:55,588 INFO BGP-Thread-1 (job): Iteration: 22000 - total remaining prefixes: 227991
2026-04-18 03:23:55,641 INFO BGP-Thread-1 (job): Iteration: 23000 - total remaining prefixes: 226991
2026-04-18 03:23:55,696 INFO BGP-Thread-1 (job): Iteration: 24000 - total remaining prefixes: 225991
2026-04-18 03:23:55,747 INFO BGP-Thread-1 (job): Iteration: 25000 - total remaining prefixes: 224991
2026-04-18 03:23:55,801 INFO BGP-Thread-1 (job): Iteration: 26000 - total remaining prefixes: 223991
2026-04-18 03:23:55,857 INFO BGP-Thread-1 (job): Iteration: 27000 - total remaining prefixes: 222991
2026-04-18 03:23:55,908 INFO BGP-Thread-1 (job): Iteration: 28000 - total remaining prefixes: 221991
2026-04-18 03:23:55,963 INFO BGP-Thread-1 (job): Iteration: 29000 - total remaining prefixes: 220991
2026-04-18 03:23:56,017 INFO BGP-Thread-1 (job): Iteration: 30000 - total remaining prefixes: 219991
2026-04-18 03:23:56,074 INFO BGP-Thread-1 (job): Iteration: 31000 - total remaining prefixes: 218991
2026-04-18 03:23:56,128 INFO BGP-Thread-1 (job): Iteration: 32000 - total remaining prefixes: 217991
2026-04-18 03:23:56,181 INFO BGP-Thread-1 (job): Iteration: 33000 - total remaining prefixes: 216991
2026-04-18 03:23:56,237 INFO BGP-Thread-1 (job): Iteration: 34000 - total remaining prefixes: 215991
2026-04-18 03:23:56,295 INFO BGP-Thread-1 (job): Iteration: 35000 - total remaining prefixes: 214991
2026-04-18 03:23:56,346 INFO BGP-Thread-1 (job): Iteration: 36000 - total remaining prefixes: 213991
2026-04-18 03:23:56,398 INFO BGP-Thread-1 (job): Iteration: 37000 - total remaining prefixes: 212991
2026-04-18 03:23:56,455 INFO BGP-Thread-1 (job): Iteration: 38000 - total remaining prefixes: 211991
2026-04-18 03:23:56,510 INFO BGP-Thread-1 (job): Iteration: 39000 - total remaining prefixes: 210991
2026-04-18 03:23:56,560 INFO BGP-Thread-1 (job): Iteration: 40000 - total remaining prefixes: 209991
2026-04-18 03:23:56,610 INFO BGP-Thread-1 (job): Iteration: 41000 - total remaining prefixes: 208991
2026-04-18 03:23:56,676 INFO BGP-Thread-1 (job): Iteration: 42000 - total remaining prefixes: 207991
2026-04-18 03:23:56,732 INFO BGP-Thread-1 (job): Iteration: 43000 - total remaining prefixes: 206991
2026-04-18 03:23:56,847 INFO BGP-Thread-1 (job): Iteration: 44000 - total remaining prefixes: 205991
2026-04-18 03:23:56,911 INFO BGP-Thread-1 (job): Iteration: 45000 - total remaining prefixes: 204991
2026-04-18 03:23:57,066 INFO BGP-Thread-1 (job): Iteration: 46000 - total remaining prefixes: 203991
2026-04-18 03:23:57,150 INFO BGP-Thread-1 (job): Iteration: 47000 - total remaining prefixes: 202991
2026-04-18 03:23:57,258 INFO BGP-Thread-1 (job): Iteration: 48000 - total remaining prefixes: 201991
2026-04-18 03:23:57,316 INFO BGP-Thread-1 (job): Iteration: 49000 - total remaining prefixes: 200991
2026-04-18 03:23:57,529 INFO BGP-Thread-1 (job): Iteration: 50000 - total remaining prefixes: 199991
2026-04-18 03:23:57,819 INFO BGP-Thread-1 (job): Iteration: 51000 - total remaining prefixes: 198991
2026-04-18 03:23:58,022 INFO BGP-Thread-1 (job): Iteration: 52000 - total remaining prefixes: 197991
2026-04-18 03:23:58,075 INFO BGP-Thread-1 (job): Iteration: 53000 - total remaining prefixes: 196991
2026-04-18 03:23:58,255 INFO BGP-Thread-1 (job): Iteration: 54000 - total remaining prefixes: 195991
2026-04-18 03:23:58,407 INFO BGP-Thread-1 (job): Iteration: 55000 - total remaining prefixes: 194991
2026-04-18 03:23:58,560 INFO BGP-Thread-1 (job): Iteration: 56000 - total remaining prefixes: 193991
2026-04-18 03:23:58,715 INFO BGP-Thread-1 (job): Iteration: 57000 - total remaining prefixes: 192991
2026-04-18 03:23:58,894 INFO BGP-Thread-1 (job): Iteration: 58000 - total remaining prefixes: 191991
2026-04-18 03:23:59,095 INFO BGP-Thread-1 (job): Iteration: 59000 - total remaining prefixes: 190991
2026-04-18 03:23:59,244 INFO BGP-Thread-1 (job): Iteration: 60000 - total remaining prefixes: 189991
2026-04-18 03:23:59,307 INFO BGP-Thread-1 (job): Iteration: 61000 - total remaining prefixes: 188991
2026-04-18 03:23:59,465 INFO BGP-Thread-1 (job): Iteration: 62000 - total remaining prefixes: 187991
2026-04-18 03:23:59,601 INFO BGP-Thread-1 (job): Iteration: 63000 - total remaining prefixes: 186991
2026-04-18 03:23:59,715 INFO BGP-Thread-1 (job): Iteration: 64000 - total remaining prefixes: 185991
2026-04-18 03:23:59,995 INFO BGP-Thread-1 (job): Iteration: 65000 - total remaining prefixes: 184991
2026-04-18 03:24:00,171 INFO BGP-Thread-1 (job): Iteration: 66000 - total remaining prefixes: 183991
2026-04-18 03:24:00,304 INFO BGP-Thread-1 (job): Iteration: 67000 - total remaining prefixes: 182991
2026-04-18 03:24:00,358 INFO BGP-Thread-1 (job): Iteration: 68000 - total remaining prefixes: 181991
2026-04-18 03:24:00,534 INFO BGP-Thread-1 (job): Iteration: 69000 - total remaining prefixes: 180991
2026-04-18 03:24:00,687 INFO BGP-Thread-1 (job): Iteration: 70000 - total remaining prefixes: 179991
2026-04-18 03:24:00,771 INFO BGP-Thread-1 (job): Iteration: 71000 - total remaining prefixes: 178991
2026-04-18 03:24:00,824 INFO BGP-Thread-1 (job): Iteration: 72000 - total remaining prefixes: 177991
2026-04-18 03:24:00,911 INFO BGP-Thread-1 (job): Iteration: 73000 - total remaining prefixes: 176991
2026-04-18 03:24:01,182 INFO BGP-Thread-1 (job): Iteration: 74000 - total remaining prefixes: 175991
2026-04-18 03:24:01,292 INFO BGP-Thread-1 (job): Iteration: 75000 - total remaining prefixes: 174991
2026-04-18 03:24:01,414 INFO BGP-Thread-1 (job): Iteration: 76000 - total remaining prefixes: 173991
2026-04-18 03:24:01,504 INFO BGP-Thread-1 (job): Iteration: 77000 - total remaining prefixes: 172991
2026-04-18 03:24:01,560 INFO BGP-Thread-1 (job): Iteration: 78000 - total remaining prefixes: 171991
2026-04-18 03:24:01,652 INFO BGP-Thread-1 (job): Iteration: 79000 - total remaining prefixes: 170991
2026-04-18 03:24:01,772 INFO BGP-Thread-1 (job): Iteration: 80000 - total remaining prefixes: 169991
2026-04-18 03:24:01,840 INFO BGP-Thread-1 (job): Iteration: 81000 - total remaining prefixes: 168991
2026-04-18 03:24:01,893 INFO BGP-Thread-1 (job): Iteration: 82000 - total remaining prefixes: 167991
2026-04-18 03:24:01,947 INFO BGP-Thread-1 (job): Iteration: 83000 - total remaining prefixes: 166991
2026-04-18 03:24:02,029 INFO BGP-Thread-1 (job): Iteration: 84000 - total remaining prefixes: 165991
2026-04-18 03:24:02,082 INFO BGP-Thread-1 (job): Iteration: 85000 - total remaining prefixes: 164991
2026-04-18 03:24:02,329 INFO BGP-Thread-1 (job): Iteration: 86000 - total remaining prefixes: 163991
2026-04-18 03:24:02,426 INFO BGP-Thread-1 (job): Iteration: 87000 - total remaining prefixes: 162991
2026-04-18 03:24:02,481 INFO BGP-Thread-1 (job): Iteration: 88000 - total remaining prefixes: 161991
2026-04-18 03:24:02,579 INFO BGP-Thread-1 (job): Iteration: 89000 - total remaining prefixes: 160991
2026-04-18 03:24:02,798 INFO BGP-Thread-1 (job): Iteration: 90000 - total remaining prefixes: 159991
2026-04-18 03:24:02,961 INFO BGP-Thread-1 (job): Iteration: 91000 - total remaining prefixes: 158991
2026-04-18 03:24:03,066 INFO BGP-Thread-1 (job): Iteration: 92000 - total remaining prefixes: 157991
2026-04-18 03:24:03,197 INFO BGP-Thread-1 (job): Iteration: 93000 - total remaining prefixes: 156991
2026-04-18 03:24:03,451 INFO BGP-Thread-1 (job): Iteration: 94000 - total remaining prefixes: 155991
2026-04-18 03:24:03,523 INFO BGP-Thread-1 (job): Iteration: 95000 - total remaining prefixes: 154991
2026-04-18 03:24:03,582 INFO BGP-Thread-1 (job): Iteration: 96000 - total remaining prefixes: 153991
2026-04-18 03:24:03,667 INFO BGP-Thread-1 (job): Iteration: 97000 - total remaining prefixes: 152991
2026-04-18 03:24:03,720 INFO BGP-Thread-1 (job): Iteration: 98000 - total remaining prefixes: 151991
2026-04-18 03:24:03,841 INFO BGP-Thread-1 (job): Iteration: 99000 - total remaining prefixes: 150991
2026-04-18 03:24:03,958 INFO BGP-Thread-1 (job): Iteration: 100000 - total remaining prefixes: 149991
2026-04-18 03:24:04,041 INFO BGP-Thread-1 (job): Iteration: 101000 - total remaining prefixes: 148991
2026-04-18 03:24:04,115 INFO BGP-Thread-1 (job): Iteration: 102000 - total remaining prefixes: 147991
2026-04-18 03:24:04,187 INFO BGP-Thread-1 (job): Iteration: 103000 - total remaining prefixes: 146991
2026-04-18 03:24:04,238 INFO BGP-Thread-1 (job): Iteration: 104000 - total remaining prefixes: 145991
2026-04-18 03:24:04,287 INFO BGP-Thread-1 (job): Iteration: 105000 - total remaining prefixes: 144991
2026-04-18 03:24:04,482 INFO BGP-Thread-1 (job): Iteration: 106000 - total remaining prefixes: 143991
2026-04-18 03:24:04,539 INFO BGP-Thread-1 (job): Iteration: 107000 - total remaining prefixes: 142991
2026-04-18 03:24:04,596 INFO BGP-Thread-1 (job): Iteration: 108000 - total remaining prefixes: 141991
2026-04-18 03:24:04,688 INFO BGP-Thread-1 (job): Iteration: 109000 - total remaining prefixes: 140991
2026-04-18 03:24:04,743 INFO BGP-Thread-1 (job): Iteration: 110000 - total remaining prefixes: 139991
2026-04-18 03:24:04,794 INFO BGP-Thread-1 (job): Iteration: 111000 - total remaining prefixes: 138991
2026-04-18 03:24:04,861 INFO BGP-Thread-1 (job): Iteration: 112000 - total remaining prefixes: 137991
2026-04-18 03:24:04,923 INFO BGP-Thread-1 (job): Iteration: 113000 - total remaining prefixes: 136991
2026-04-18 03:24:04,976 INFO BGP-Thread-1 (job): Iteration: 114000 - total remaining prefixes: 135991
2026-04-18 03:24:05,031 INFO BGP-Thread-1 (job): Iteration: 115000 - total remaining prefixes: 134991
2026-04-18 03:24:05,084 INFO BGP-Thread-1 (job): Iteration: 116000 - total remaining prefixes: 133991
2026-04-18 03:24:05,153 INFO BGP-Thread-1 (job): Iteration: 117000 - total remaining prefixes: 132991
2026-04-18 03:24:05,221 INFO BGP-Thread-1 (job): Iteration: 118000 - total remaining prefixes: 131991
2026-04-18 03:24:05,419 INFO BGP-Thread-1 (job): Iteration: 119000 - total remaining prefixes: 130991
2026-04-18 03:24:05,486 INFO BGP-Thread-1 (job): Iteration: 120000 - total remaining prefixes: 129991
2026-04-18 03:24:05,567 INFO BGP-Thread-1 (job): Iteration: 121000 - total remaining prefixes: 128991
2026-04-18 03:24:05,651 INFO BGP-Thread-1 (job): Iteration: 122000 - total remaining prefixes: 127991
2026-04-18 03:24:05,715 INFO BGP-Thread-1 (job): Iteration: 123000 - total remaining prefixes: 126991
2026-04-18 03:24:05,767 INFO BGP-Thread-1 (job): Iteration: 124000 - total remaining prefixes: 125991
2026-04-18 03:24:05,832 INFO BGP-Thread-1 (job): Iteration: 125000 - total remaining prefixes: 124991
2026-04-18 03:24:05,929 INFO BGP-Thread-1 (job): Iteration: 126000 - total remaining prefixes: 123991
2026-04-18 03:24:05,999 INFO BGP-Thread-1 (job): Iteration: 127000 - total remaining prefixes: 122991
2026-04-18 03:24:06,085 INFO BGP-Thread-1 (job): Iteration: 128000 - total remaining prefixes: 121991
2026-04-18 03:24:06,153 INFO BGP-Thread-1 (job): Iteration: 129000 - total remaining prefixes: 120991
2026-04-18 03:24:06,211 INFO BGP-Thread-1 (job): Iteration: 130000 - total remaining prefixes: 119991
2026-04-18 03:24:06,423 INFO BGP-Thread-1 (job): Iteration: 131000 - total remaining prefixes: 118991
2026-04-18 03:24:06,513 INFO BGP-Thread-1 (job): Iteration: 132000 - total remaining prefixes: 117991
2026-04-18 03:24:06,588 INFO BGP-Thread-1 (job): Iteration: 133000 - total remaining prefixes: 116991
2026-04-18 03:24:06,642 INFO BGP-Thread-1 (job): Iteration: 134000 - total remaining prefixes: 115991
2026-04-18 03:24:06,741 INFO BGP-Thread-1 (job): Iteration: 135000 - total remaining prefixes: 114991
2026-04-18 03:24:06,840 INFO BGP-Thread-1 (job): Iteration: 136000 - total remaining prefixes: 113991
2026-04-18 03:24:06,966 INFO BGP-Thread-1 (job): Iteration: 137000 - total remaining prefixes: 112991
2026-04-18 03:24:07,076 INFO BGP-Thread-1 (job): Iteration: 138000 - total remaining prefixes: 111991
2026-04-18 03:24:07,154 INFO BGP-Thread-1 (job): Iteration: 139000 - total remaining prefixes: 110991
2026-04-18 03:24:07,245 INFO BGP-Thread-1 (job): Iteration: 140000 - total remaining prefixes: 109991
2026-04-18 03:24:07,424 INFO BGP-Thread-1 (job): Iteration: 141000 - total remaining prefixes: 108991
2026-04-18 03:24:07,566 INFO BGP-Thread-1 (job): Iteration: 142000 - total remaining prefixes: 107991
2026-04-18 03:24:07,672 INFO BGP-Thread-1 (job): Iteration: 143000 - total remaining prefixes: 106991
2026-04-18 03:24:07,744 INFO BGP-Thread-1 (job): Iteration: 144000 - total remaining prefixes: 105991
2026-04-18 03:24:07,841 INFO BGP-Thread-1 (job): Iteration: 145000 - total remaining prefixes: 104991
2026-04-18 03:24:07,892 INFO BGP-Thread-1 (job): Iteration: 146000 - total remaining prefixes: 103991
2026-04-18 03:24:07,942 INFO BGP-Thread-1 (job): Iteration: 147000 - total remaining prefixes: 102991
2026-04-18 03:24:08,002 INFO BGP-Thread-1 (job): Iteration: 148000 - total remaining prefixes: 101991
2026-04-18 03:24:08,085 INFO BGP-Thread-1 (job): Iteration: 149000 - total remaining prefixes: 100991
2026-04-18 03:24:08,164 INFO BGP-Thread-1 (job): Iteration: 150000 - total remaining prefixes: 99991
2026-04-18 03:24:08,261 INFO BGP-Thread-1 (job): Iteration: 151000 - total remaining prefixes: 98991
2026-04-18 03:24:08,472 INFO BGP-Thread-1 (job): Iteration: 152000 - total remaining prefixes: 97991
2026-04-18 03:24:08,541 INFO BGP-Thread-1 (job): Iteration: 153000 - total remaining prefixes: 96991
2026-04-18 03:24:08,606 INFO BGP-Thread-1 (job): Iteration: 154000 - total remaining prefixes: 95991
2026-04-18 03:24:08,699 INFO BGP-Thread-1 (job): Iteration: 155000 - total remaining prefixes: 94991
2026-04-18 03:24:08,777 INFO BGP-Thread-1 (job): Iteration: 156000 - total remaining prefixes: 93991
2026-04-18 03:24:08,831 INFO BGP-Thread-1 (job): Iteration: 157000 - total remaining prefixes: 92991
2026-04-18 03:24:08,931 INFO BGP-Thread-1 (job): Iteration: 158000 - total remaining prefixes: 91991
2026-04-18 03:24:09,014 INFO BGP-Thread-1 (job): Iteration: 159000 - total remaining prefixes: 90991
2026-04-18 03:24:09,107 INFO BGP-Thread-1 (job): Iteration: 160000 - total remaining prefixes: 89991
2026-04-18 03:24:09,165 INFO BGP-Thread-1 (job): Iteration: 161000 - total remaining prefixes: 88991
2026-04-18 03:24:09,221 INFO BGP-Thread-1 (job): Iteration: 162000 - total remaining prefixes: 87991
2026-04-18 03:24:09,274 INFO BGP-Thread-1 (job): Iteration: 163000 - total remaining prefixes: 86991
2026-04-18 03:24:09,567 INFO BGP-Thread-1 (job): Iteration: 164000 - total remaining prefixes: 85991
2026-04-18 03:24:09,655 INFO BGP-Thread-1 (job): Iteration: 165000 - total remaining prefixes: 84991
2026-04-18 03:24:09,750 INFO BGP-Thread-1 (job): Iteration: 166000 - total remaining prefixes: 83991
2026-04-18 03:24:09,818 INFO BGP-Thread-1 (job): Iteration: 167000 - total remaining prefixes: 82991
2026-04-18 03:24:09,872 INFO BGP-Thread-1 (job): Iteration: 168000 - total remaining prefixes: 81991
2026-04-18 03:24:10,010 INFO BGP-Thread-1 (job): Iteration: 169000 - total remaining prefixes: 80991
2026-04-18 03:24:10,067 INFO BGP-Thread-1 (job): Iteration: 170000 - total remaining prefixes: 79991
2026-04-18 03:24:10,158 INFO BGP-Thread-1 (job): Iteration: 171000 - total remaining prefixes: 78991
2026-04-18 03:24:10,272 INFO BGP-Thread-1 (job): Iteration: 172000 - total remaining prefixes: 77991
2026-04-18 03:24:10,393 INFO BGP-Thread-1 (job): Iteration: 173000 - total remaining prefixes: 76991
2026-04-18 03:24:10,611 INFO BGP-Thread-1 (job): Iteration: 174000 - total remaining prefixes: 75991
2026-04-18 03:24:10,704 INFO BGP-Thread-1 (job): Iteration: 175000 - total remaining prefixes: 74991
2026-04-18 03:24:10,802 INFO BGP-Thread-1 (job): Iteration: 176000 - total remaining prefixes: 73991
2026-04-18 03:24:10,944 INFO BGP-Thread-1 (job): Iteration: 177000 - total remaining prefixes: 72991
2026-04-18 03:24:11,026 INFO BGP-Thread-1 (job): Iteration: 178000 - total remaining prefixes: 71991
2026-04-18 03:24:11,186 INFO BGP-Thread-1 (job): Iteration: 179000 - total remaining prefixes: 70991
2026-04-18 03:24:11,273 INFO BGP-Thread-1 (job): Iteration: 180000 - total remaining prefixes: 69991
2026-04-18 03:24:11,325 INFO BGP-Thread-1 (job): Iteration: 181000 - total remaining prefixes: 68991
2026-04-18 03:24:11,433 INFO BGP-Thread-1 (job): Iteration: 182000 - total remaining prefixes: 67991
2026-04-18 03:24:11,630 INFO BGP-Thread-1 (job): Iteration: 183000 - total remaining prefixes: 66991
2026-04-18 03:24:11,718 INFO BGP-Thread-1 (job): Iteration: 184000 - total remaining prefixes: 65991
2026-04-18 03:24:11,816 INFO BGP-Thread-1 (job): Iteration: 185000 - total remaining prefixes: 64991
2026-04-18 03:24:11,897 INFO BGP-Thread-1 (job): Iteration: 186000 - total remaining prefixes: 63991
2026-04-18 03:24:11,995 INFO BGP-Thread-1 (job): Iteration: 187000 - total remaining prefixes: 62991
2026-04-18 03:24:12,108 INFO BGP-Thread-1 (job): Iteration: 188000 - total remaining prefixes: 61991
2026-04-18 03:24:12,185 INFO BGP-Thread-1 (job): Iteration: 189000 - total remaining prefixes: 60991
2026-04-18 03:24:12,235 INFO BGP-Thread-1 (job): Iteration: 190000 - total remaining prefixes: 59991
2026-04-18 03:24:12,358 INFO BGP-Thread-1 (job): Iteration: 191000 - total remaining prefixes: 58991
2026-04-18 03:24:12,411 INFO BGP-Thread-1 (job): Iteration: 192000 - total remaining prefixes: 57991
2026-04-18 03:24:12,604 INFO BGP-Thread-1 (job): Iteration: 193000 - total remaining prefixes: 56991
2026-04-18 03:24:12,673 INFO BGP-Thread-1 (job): Iteration: 194000 - total remaining prefixes: 55991
2026-04-18 03:24:12,778 INFO BGP-Thread-1 (job): Iteration: 195000 - total remaining prefixes: 54991
2026-04-18 03:24:12,903 INFO BGP-Thread-1 (job): Iteration: 196000 - total remaining prefixes: 53991
2026-04-18 03:24:13,005 INFO BGP-Thread-1 (job): Iteration: 197000 - total remaining prefixes: 52991
2026-04-18 03:24:13,153 INFO BGP-Thread-1 (job): Iteration: 198000 - total remaining prefixes: 51991
2026-04-18 03:24:13,205 INFO BGP-Thread-1 (job): Iteration: 199000 - total remaining prefixes: 50991
2026-04-18 03:24:13,368 INFO BGP-Thread-1 (job): Iteration: 200000 - total remaining prefixes: 49991
2026-04-18 03:24:13,489 INFO BGP-Thread-1 (job): Iteration: 201000 - total remaining prefixes: 48991
2026-04-18 03:24:13,775 INFO BGP-Thread-1 (job): Iteration: 202000 - total remaining prefixes: 47991
2026-04-18 03:24:13,865 INFO BGP-Thread-1 (job): Iteration: 203000 - total remaining prefixes: 46991
2026-04-18 03:24:13,921 INFO BGP-Thread-1 (job): Iteration: 204000 - total remaining prefixes: 45991
2026-04-18 03:24:14,089 INFO BGP-Thread-1 (job): Iteration: 205000 - total remaining prefixes: 44991
2026-04-18 03:24:14,173 INFO BGP-Thread-1 (job): Iteration: 206000 - total remaining prefixes: 43991
2026-04-18 03:24:14,302 INFO BGP-Thread-1 (job): Iteration: 207000 - total remaining prefixes: 42991
2026-04-18 03:24:14,381 INFO BGP-Thread-1 (job): Iteration: 208000 - total remaining prefixes: 41991
2026-04-18 03:24:14,452 INFO BGP-Thread-1 (job): Iteration: 209000 - total remaining prefixes: 40991
2026-04-18 03:24:14,566 INFO BGP-Thread-1 (job): Iteration: 210000 - total remaining prefixes: 39991
2026-04-18 03:24:14,646 INFO BGP-Thread-1 (job): Iteration: 211000 - total remaining prefixes: 38991
2026-04-18 03:24:14,811 INFO BGP-Thread-1 (job): Iteration: 212000 - total remaining prefixes: 37991
2026-04-18 03:24:14,867 INFO BGP-Thread-1 (job): Iteration: 213000 - total remaining prefixes: 36991
2026-04-18 03:24:14,976 INFO BGP-Thread-1 (job): Iteration: 214000 - total remaining prefixes: 35991
2026-04-18 03:24:15,087 INFO BGP-Thread-1 (job): Iteration: 215000 - total remaining prefixes: 34991
2026-04-18 03:24:15,152 INFO BGP-Thread-1 (job): Iteration: 216000 - total remaining prefixes: 33991
2026-04-18 03:24:15,253 INFO BGP-Thread-1 (job): Iteration: 217000 - total remaining prefixes: 32991
2026-04-18 03:24:15,318 INFO BGP-Thread-1 (job): Iteration: 218000 - total remaining prefixes: 31991
2026-04-18 03:24:15,413 INFO BGP-Thread-1 (job): Iteration: 219000 - total remaining prefixes: 30991
2026-04-18 03:24:15,483 INFO BGP-Thread-1 (job): Iteration: 220000 - total remaining prefixes: 29991
2026-04-18 03:24:15,549 INFO BGP-Thread-1 (job): Iteration: 221000 - total remaining prefixes: 28991
2026-04-18 03:24:15,623 INFO BGP-Thread-1 (job): Iteration: 222000 - total remaining prefixes: 27991
2026-04-18 03:24:15,823 INFO BGP-Thread-1 (job): Iteration: 223000 - total remaining prefixes: 26991
2026-04-18 03:24:15,892 INFO BGP-Thread-1 (job): Iteration: 224000 - total remaining prefixes: 25991
2026-04-18 03:24:16,017 INFO BGP-Thread-1 (job): Iteration: 225000 - total remaining prefixes: 24991
2026-04-18 03:24:16,117 INFO BGP-Thread-1 (job): Iteration: 226000 - total remaining prefixes: 23991
2026-04-18 03:24:16,200 INFO BGP-Thread-1 (job): Iteration: 227000 - total remaining prefixes: 22991
2026-04-18 03:24:16,274 INFO BGP-Thread-1 (job): Iteration: 228000 - total remaining prefixes: 21991
2026-04-18 03:24:16,385 INFO BGP-Thread-1 (job): Iteration: 229000 - total remaining prefixes: 20991
2026-04-18 03:24:16,441 INFO BGP-Thread-1 (job): Iteration: 230000 - total remaining prefixes: 19991
2026-04-18 03:24:16,566 INFO BGP-Thread-1 (job): Iteration: 231000 - total remaining prefixes: 18991
2026-04-18 03:24:16,646 INFO BGP-Thread-1 (job): Iteration: 232000 - total remaining prefixes: 17991
2026-04-18 03:24:16,889 INFO BGP-Thread-1 (job): Iteration: 233000 - total remaining prefixes: 16991
2026-04-18 03:24:16,942 INFO BGP-Thread-1 (job): Iteration: 234000 - total remaining prefixes: 15991
2026-04-18 03:24:17,083 INFO BGP-Thread-1 (job): Iteration: 235000 - total remaining prefixes: 14991
2026-04-18 03:24:17,192 INFO BGP-Thread-1 (job): Iteration: 236000 - total remaining prefixes: 13991
2026-04-18 03:24:17,333 INFO BGP-Thread-1 (job): Iteration: 237000 - total remaining prefixes: 12991
2026-04-18 03:24:17,494 INFO BGP-Thread-1 (job): Iteration: 238000 - total remaining prefixes: 11991
2026-04-18 03:24:17,546 INFO BGP-Thread-1 (job): Iteration: 239000 - total remaining prefixes: 10991
2026-04-18 03:24:17,641 INFO BGP-Thread-1 (job): Iteration: 240000 - total remaining prefixes: 9991
2026-04-18 03:24:17,861 INFO BGP-Thread-1 (job): Iteration: 241000 - total remaining prefixes: 8991
2026-04-18 03:24:18,000 INFO BGP-Thread-1 (job): Iteration: 242000 - total remaining prefixes: 7991
2026-04-18 03:24:18,100 INFO BGP-Thread-1 (job): Iteration: 243000 - total remaining prefixes: 6991
2026-04-18 03:24:18,156 INFO BGP-Thread-1 (job): Iteration: 244000 - total remaining prefixes: 5991
2026-04-18 03:24:18,261 INFO BGP-Thread-1 (job): Iteration: 245000 - total remaining prefixes: 4991
2026-04-18 03:24:18,363 INFO BGP-Thread-1 (job): Iteration: 246000 - total remaining prefixes: 3991
2026-04-18 03:24:18,452 INFO BGP-Thread-1 (job): Iteration: 247000 - total remaining prefixes: 2991
2026-04-18 03:24:18,555 INFO BGP-Thread-1 (job): Iteration: 248000 - total remaining prefixes: 1991
2026-04-18 03:24:18,659 INFO BGP-Thread-1 (job): Iteration: 249000 - total remaining prefixes: 991
2026-04-18 03:24:18,785 INFO BGP-Thread-1 (job): All update messages generated.
2026-04-18 03:24:18,785 INFO BGP-Thread-1 (job): Storing performance results.
2026-04-18 03:24:18,785 INFO BGP-Thread-1 (job): ########## Final results ##########
2026-04-18 03:24:18,786 INFO BGP-Thread-1 (job): Number of iterations: 249991
2026-04-18 03:24:18,786 INFO BGP-Thread-1 (job): Number of UPDATE messages sent in the pre-fill phase: 1
2026-04-18 03:24:18,786 INFO BGP-Thread-1 (job): The pre-fill phase duration: 9.870529174804688e-05s
2026-04-18 03:24:18,786 INFO BGP-Thread-1 (job): Number of UPDATE messages sent in the 2nd test phase: 249990
2026-04-18 03:24:18,786 INFO BGP-Thread-1 (job): The 2nd test phase duration: 24.75612235069275s
2026-04-18 03:24:18,786 INFO BGP-Thread-1 (job): Threshold for performance reporting: 1000
2026-04-18 03:24:18,786 INFO BGP-Thread-1 (job): Message generator performance results stored in totals-bgp.csv:
2026-04-18 03:24:18,786 INFO BGP-Thread-1 (job):   +10/-9 routes per UPDATE
2026-04-18 03:24:18,786 INFO BGP-Thread-1 (job):   249990
2026-04-18 03:24:18,786 INFO BGP-Thread-1 (job): Message generator performance results stored in performance-bgp.csv:
2026-04-18 03:24:18,786 INFO BGP-Thread-1 (job):   +10/-9 routes per UPDATE
2026-04-18 03:24:18,786 INFO BGP-Thread-1 (job):   10098
2026-04-18 03:24:18,786 INFO BGP-Thread-1 (job): Finally an END-OF-RIB is sent.
2026-04-18 03:24:28,797 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:24:28,797 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 10.010s
2026-04-18 03:24:28,797 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:24:28,797 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:24:28,797 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:24:38,808 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:24:38,808 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 20.020s
2026-04-18 03:24:38,808 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:24:38,809 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:24:38,809 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:24:48,819 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:24:48,819 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 30.030s
2026-04-18 03:24:48,819 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:24:48,819 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:24:48,819 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:24:54,040 INFO BGP-Thread-1 (job): ... idle for 5.221s
2026-04-18 03:24:54,042 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 35.251s
2026-04-18 03:24:54,042 INFO BGP-Thread-1 (job): KEEP ALIVE message received: 0xffffffffffffffffffffffffffffffff001304
2026-04-18 03:24:54,042 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:24:54,043 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:24:54,043 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:25:04,053 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:25:04,053 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 45.261s
2026-04-18 03:25:04,053 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:25:04,053 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:25:04,053 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:25:14,059 INFO BGP-Thread-1 (job): ... idle for 10.005s
2026-04-18 03:25:14,059 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 55.266s
2026-04-18 03:25:14,059 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:25:14,059 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:25:14,059 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:25:18,792 INFO BGP-Thread-1 (job): ... idle for 4.732s
2026-04-18 03:25:18,792 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 59.999s
2026-04-18 03:25:18,792 INFO BGP-Thread-1 (job): KEEP ALIVE is sent.
2026-04-18 03:25:18,792 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:25:18,793 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:25:18,793 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:25:28,803 INFO BGP-Thread-1 (job): ... idle for 10.011s
2026-04-18 03:25:28,804 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 70.009s
2026-04-18 03:25:28,804 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:25:28,804 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:25:28,804 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:25:38,814 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:25:38,814 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 80.020s
2026-04-18 03:25:38,815 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:25:38,815 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:25:38,815 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:25:48,825 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:25:48,825 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 90.030s
2026-04-18 03:25:48,825 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:25:48,825 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:25:48,825 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:25:54,077 INFO BGP-Thread-1 (job): ... idle for 5.251s
2026-04-18 03:25:54,077 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 95.281s
2026-04-18 03:25:54,077 INFO BGP-Thread-1 (job): KEEP ALIVE message received: 0xffffffffffffffffffffffffffffffff001304
2026-04-18 03:25:54,078 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:25:54,078 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:25:54,078 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:26:04,088 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:26:04,088 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 105.291s
2026-04-18 03:26:04,088 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:26:04,089 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:26:04,089 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:26:14,099 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:26:14,099 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 115.301s
2026-04-18 03:26:14,099 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:26:14,099 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:26:14,099 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:26:18,798 INFO BGP-Thread-1 (job): ... idle for 4.698s
2026-04-18 03:26:18,798 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 119.999s
2026-04-18 03:26:18,798 INFO BGP-Thread-1 (job): KEEP ALIVE is sent.
2026-04-18 03:26:18,798 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:26:18,798 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:26:18,798 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:26:28,808 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:26:28,809 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 130.009s
2026-04-18 03:26:28,809 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:26:28,809 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:26:28,809 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:26:38,819 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:26:38,819 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 140.019s
2026-04-18 03:26:38,820 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:26:38,820 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:26:38,820 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:26:48,830 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:26:48,830 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 150.029s
2026-04-18 03:26:48,830 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:26:48,831 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:26:48,831 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:26:54,077 INFO BGP-Thread-1 (job): ... idle for 5.247s
2026-04-18 03:26:54,078 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 155.276s
2026-04-18 03:26:54,078 INFO BGP-Thread-1 (job): KEEP ALIVE message received: 0xffffffffffffffffffffffffffffffff001304
2026-04-18 03:26:54,078 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:26:54,078 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:26:54,078 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:27:04,088 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:27:04,088 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 165.286s
2026-04-18 03:27:04,089 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:27:04,089 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:27:04,089 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:27:14,099 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:27:14,099 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 175.296s
2026-04-18 03:27:14,099 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:27:14,100 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:27:14,100 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:27:18,803 INFO BGP-Thread-1 (job): ... idle for 4.703s
2026-04-18 03:27:18,803 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 179.999s
2026-04-18 03:27:18,803 INFO BGP-Thread-1 (job): KEEP ALIVE is sent.
2026-04-18 03:27:18,804 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:27:18,804 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:27:18,804 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:27:28,814 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:27:28,814 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 190.009s
2026-04-18 03:27:28,814 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:27:28,814 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:27:28,814 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:27:38,825 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:27:38,825 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 200.020s
2026-04-18 03:27:38,825 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:27:38,825 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:27:38,825 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:27:48,835 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:27:48,836 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 210.030s
2026-04-18 03:27:48,836 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:27:48,836 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:27:48,836 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:27:54,078 INFO BGP-Thread-1 (job): ... idle for 5.242s
2026-04-18 03:27:54,078 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 215.271s
2026-04-18 03:27:54,078 INFO BGP-Thread-1 (job): KEEP ALIVE message received: 0xffffffffffffffffffffffffffffffff001304
2026-04-18 03:27:54,078 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:27:54,079 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:27:54,079 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:28:04,087 INFO BGP-Thread-1 (job): ... idle for 10.008s
2026-04-18 03:28:04,087 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 225.279s
2026-04-18 03:28:04,087 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:28:04,087 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:28:04,087 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:28:14,097 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:28:14,098 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 235.289s
2026-04-18 03:28:14,098 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:28:14,098 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:28:14,098 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:28:18,809 INFO BGP-Thread-1 (job): ... idle for 4.711s
2026-04-18 03:28:18,809 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 240.000s
2026-04-18 03:28:18,809 INFO BGP-Thread-1 (job): KEEP ALIVE is sent.
2026-04-18 03:28:18,809 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:28:18,809 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:28:18,810 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:28:28,820 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:28:28,820 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 250.010s
2026-04-18 03:28:28,820 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:28:28,820 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:28:28,820 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:28:38,831 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:28:38,831 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 260.020s
2026-04-18 03:28:38,831 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:28:38,831 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:28:38,831 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:28:48,842 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:28:48,842 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 270.030s
2026-04-18 03:28:48,842 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:28:48,842 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:28:48,842 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:28:54,113 INFO BGP-Thread-1 (job): ... idle for 5.271s
2026-04-18 03:28:54,113 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 275.301s
2026-04-18 03:28:54,113 INFO BGP-Thread-1 (job): KEEP ALIVE message received: 0xffffffffffffffffffffffffffffffff001304
2026-04-18 03:28:54,114 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:28:54,114 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:28:54,114 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:29:04,124 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:29:04,124 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 285.311s
2026-04-18 03:29:04,124 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:29:04,124 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:29:04,124 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:29:14,136 INFO BGP-Thread-1 (job): ... idle for 10.012s
2026-04-18 03:29:14,136 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 295.323s
2026-04-18 03:29:14,137 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:29:14,137 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:29:14,137 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:29:18,815 INFO BGP-Thread-1 (job): ... idle for 4.678s
2026-04-18 03:29:18,815 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 300.001s
2026-04-18 03:29:18,815 INFO BGP-Thread-1 (job): KEEP ALIVE is sent.
2026-04-18 03:29:18,815 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:29:18,815 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:29:18,816 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:29:28,826 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:29:28,826 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 310.011s
2026-04-18 03:29:28,826 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:29:28,826 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:29:28,826 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:29:38,828 INFO BGP-Thread-1 (job): ... idle for 10.002s
2026-04-18 03:29:38,829 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 320.013s
2026-04-18 03:29:38,829 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:29:38,829 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:29:38,829 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:29:48,840 INFO BGP-Thread-1 (job): ... idle for 10.011s
2026-04-18 03:29:48,840 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 330.023s
2026-04-18 03:29:48,840 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:29:48,840 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:29:48,840 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:29:54,136 INFO BGP-Thread-1 (job): ... idle for 5.295s
2026-04-18 03:29:54,136 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 335.318s
2026-04-18 03:29:54,136 INFO BGP-Thread-1 (job): KEEP ALIVE message received: 0xffffffffffffffffffffffffffffffff001304
2026-04-18 03:29:54,136 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:29:54,136 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:29:54,136 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:30:04,147 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:30:04,147 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 345.329s
2026-04-18 03:30:04,147 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:30:04,147 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:30:04,147 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:30:14,160 INFO BGP-Thread-1 (job): ... idle for 10.012s
2026-04-18 03:30:14,160 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 355.341s
2026-04-18 03:30:14,160 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:30:14,160 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:30:14,160 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:30:18,820 INFO BGP-Thread-1 (job): ... idle for 4.660s
2026-04-18 03:30:18,821 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 360.001s
2026-04-18 03:30:18,821 INFO BGP-Thread-1 (job): KEEP ALIVE is sent.
2026-04-18 03:30:18,821 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:30:18,822 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:30:18,822 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:30:28,832 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:30:28,832 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 370.011s
2026-04-18 03:30:28,832 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:30:28,833 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:30:28,833 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:30:38,843 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:30:38,843 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 380.021s
2026-04-18 03:30:38,843 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:30:38,844 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:30:38,844 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:30:48,854 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:30:48,854 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 390.031s
2026-04-18 03:30:48,854 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:30:48,855 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:30:48,855 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:30:54,155 INFO BGP-Thread-1 (job): ... idle for 5.300s
2026-04-18 03:30:54,155 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 395.332s
2026-04-18 03:30:54,155 INFO BGP-Thread-1 (job): KEEP ALIVE message received: 0xffffffffffffffffffffffffffffffff001304
2026-04-18 03:30:54,156 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:30:54,156 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:30:54,156 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:31:04,166 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:31:04,166 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 405.342s
2026-04-18 03:31:04,166 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:31:04,166 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:31:04,167 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:31:14,177 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:31:14,177 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 415.352s
2026-04-18 03:31:14,177 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:31:14,177 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:31:14,177 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:31:18,828 INFO BGP-Thread-1 (job): ... idle for 4.650s
2026-04-18 03:31:18,828 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 420.002s
2026-04-18 03:31:18,828 INFO BGP-Thread-1 (job): KEEP ALIVE is sent.
2026-04-18 03:31:18,828 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:31:18,828 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:31:18,828 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:31:28,839 INFO BGP-Thread-1 (job): ... idle for 10.011s
2026-04-18 03:31:28,840 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 430.013s
2026-04-18 03:31:28,840 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:31:28,840 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:31:28,840 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:31:38,851 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:31:38,851 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 440.023s
2026-04-18 03:31:38,851 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:31:38,851 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:31:38,852 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:31:48,862 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:31:48,862 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 450.034s
2026-04-18 03:31:48,862 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:31:48,862 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:31:48,862 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:31:54,184 INFO BGP-Thread-1 (job): ... idle for 5.322s
2026-04-18 03:31:54,184 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 455.355s
2026-04-18 03:31:54,184 INFO BGP-Thread-1 (job): KEEP ALIVE message received: 0xffffffffffffffffffffffffffffffff001304
2026-04-18 03:31:54,185 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:31:54,185 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:31:54,185 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:32:04,195 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:32:04,195 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 465.365s
2026-04-18 03:32:04,195 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:32:04,196 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:32:04,196 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:32:14,206 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:32:14,206 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 475.376s
2026-04-18 03:32:14,207 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:32:14,207 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:32:14,207 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:32:18,833 INFO BGP-Thread-1 (job): ... idle for 4.626s
2026-04-18 03:32:18,834 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 480.002s
2026-04-18 03:32:18,834 INFO BGP-Thread-1 (job): KEEP ALIVE is sent.
2026-04-18 03:32:18,834 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:32:18,834 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:32:18,834 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:32:28,844 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:32:28,845 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 490.012s
2026-04-18 03:32:28,845 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:32:28,845 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:32:28,845 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:32:38,855 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:32:38,856 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 500.023s
2026-04-18 03:32:38,856 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:32:38,856 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:32:38,856 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:32:48,866 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:32:48,867 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 510.033s
2026-04-18 03:32:48,867 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:32:48,867 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:32:48,867 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:32:54,220 INFO BGP-Thread-1 (job): ... idle for 5.353s
2026-04-18 03:32:54,221 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 515.386s
2026-04-18 03:32:54,221 INFO BGP-Thread-1 (job): KEEP ALIVE message received: 0xffffffffffffffffffffffffffffffff001304
2026-04-18 03:32:54,222 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:32:54,222 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:32:54,222 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:33:04,232 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:33:04,232 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 525.396s
2026-04-18 03:33:04,232 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:33:04,232 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:33:04,233 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:33:14,243 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:33:14,243 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 535.406s
2026-04-18 03:33:14,243 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:33:14,243 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:33:14,243 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:33:18,839 INFO BGP-Thread-1 (job): ... idle for 4.596s
2026-04-18 03:33:18,839 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 540.001s
2026-04-18 03:33:18,839 INFO BGP-Thread-1 (job): KEEP ALIVE is sent.
2026-04-18 03:33:18,840 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:33:18,840 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:33:18,840 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:33:28,850 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:33:28,850 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 550.012s
2026-04-18 03:33:28,850 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:33:28,851 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:33:28,851 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:33:38,861 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:33:38,861 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 560.022s
2026-04-18 03:33:38,861 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:33:38,862 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:33:38,862 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:33:48,872 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:33:48,872 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 570.032s
2026-04-18 03:33:48,872 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:33:48,872 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:33:48,873 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:33:54,256 INFO BGP-Thread-1 (job): ... idle for 5.384s
2026-04-18 03:33:54,257 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 575.416s
2026-04-18 03:33:54,257 INFO BGP-Thread-1 (job): KEEP ALIVE message received: 0xffffffffffffffffffffffffffffffff001304
2026-04-18 03:33:54,257 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:33:54,257 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:33:54,257 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:34:04,267 INFO BGP-Thread-1 (job): ... idle for 10.009s
2026-04-18 03:34:04,267 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 585.425s
2026-04-18 03:34:04,267 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:34:04,267 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:34:04,267 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:34:14,277 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:34:14,278 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 595.435s
2026-04-18 03:34:14,278 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:34:14,278 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:34:14,278 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:34:18,844 INFO BGP-Thread-1 (job): ... idle for 4.566s
2026-04-18 03:34:18,845 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 600.001s
2026-04-18 03:34:18,845 INFO BGP-Thread-1 (job): KEEP ALIVE is sent.
2026-04-18 03:34:18,845 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:34:18,845 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:34:18,845 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:34:28,858 INFO BGP-Thread-1 (job): ... idle for 10.013s
2026-04-18 03:34:28,858 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 610.014s
2026-04-18 03:34:28,858 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:34:28,859 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:34:28,859 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:34:38,863 INFO BGP-Thread-1 (job): ... idle for 10.004s
2026-04-18 03:34:38,863 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 620.019s
2026-04-18 03:34:38,864 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:34:38,864 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:34:38,864 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:34:48,874 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:34:48,875 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 630.029s
2026-04-18 03:34:48,875 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:34:48,875 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:34:48,875 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:34:54,280 INFO BGP-Thread-1 (job): ... idle for 5.405s
2026-04-18 03:34:54,280 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 635.433s
2026-04-18 03:34:54,280 INFO BGP-Thread-1 (job): KEEP ALIVE message received: 0xffffffffffffffffffffffffffffffff001304
2026-04-18 03:34:54,280 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:34:54,280 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:34:54,280 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:35:04,290 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:35:04,291 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 645.443s
2026-04-18 03:35:04,291 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:35:04,291 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:35:04,291 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:35:14,301 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:35:14,302 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 655.453s
2026-04-18 03:35:14,302 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:35:14,302 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:35:14,302 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:35:18,847 INFO BGP-Thread-1 (job): ... idle for 4.544s
2026-04-18 03:35:18,847 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 659.998s
2026-04-18 03:35:18,847 INFO BGP-Thread-1 (job): KEEP ALIVE is sent.
2026-04-18 03:35:18,847 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:35:18,847 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:35:18,847 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:35:28,858 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:35:28,858 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 670.008s
2026-04-18 03:35:28,858 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:35:28,858 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:35:28,858 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:35:38,868 INFO BGP-Thread-1 (job): ... idle for 10.009s
2026-04-18 03:35:38,868 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 680.017s
2026-04-18 03:35:38,868 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:35:38,868 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:35:38,868 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:35:48,878 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:35:48,879 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 690.027s
2026-04-18 03:35:48,879 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:35:48,879 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:35:48,879 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:35:54,314 INFO BGP-Thread-1 (job): ... idle for 5.435s
2026-04-18 03:35:54,315 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 695.462s
2026-04-18 03:35:54,315 INFO BGP-Thread-1 (job): KEEP ALIVE message received: 0xffffffffffffffffffffffffffffffff001304
2026-04-18 03:35:54,315 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:35:54,315 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:35:54,315 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:36:04,319 INFO BGP-Thread-1 (job): ... idle for 10.004s
2026-04-18 03:36:04,319 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 705.466s
2026-04-18 03:36:04,320 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:36:04,320 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:36:04,320 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:36:14,331 INFO BGP-Thread-1 (job): ... idle for 10.012s
2026-04-18 03:36:14,332 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 715.478s
2026-04-18 03:36:14,332 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:36:14,332 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:36:14,332 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:36:18,852 INFO BGP-Thread-1 (job): ... idle for 4.520s
2026-04-18 03:36:18,852 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 719.998s
2026-04-18 03:36:18,852 INFO BGP-Thread-1 (job): KEEP ALIVE is sent.
2026-04-18 03:36:18,853 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:36:18,853 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:36:18,853 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:36:28,863 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:36:28,863 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 730.008s
2026-04-18 03:36:28,864 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:36:28,864 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:36:28,864 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:36:38,874 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:36:38,874 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 740.018s
2026-04-18 03:36:38,874 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:36:38,874 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:36:38,874 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:36:48,885 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:36:48,885 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 750.028s
2026-04-18 03:36:48,885 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:36:48,885 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:36:48,885 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:36:54,350 INFO BGP-Thread-1 (job): ... idle for 5.465s
2026-04-18 03:36:54,351 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 755.493s
2026-04-18 03:36:54,351 INFO BGP-Thread-1 (job): KEEP ALIVE message received: 0xffffffffffffffffffffffffffffffff001304
2026-04-18 03:36:54,351 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:36:54,351 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:36:54,351 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:37:04,361 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:37:04,362 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 765.503s
2026-04-18 03:37:04,362 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:37:04,362 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:37:04,362 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:37:14,372 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:37:14,373 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 775.513s
2026-04-18 03:37:14,373 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:37:14,373 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:37:14,373 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:37:18,857 INFO BGP-Thread-1 (job): ... idle for 4.484s
2026-04-18 03:37:18,858 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 779.997s
2026-04-18 03:37:18,858 INFO BGP-Thread-1 (job): KEEP ALIVE is sent.
2026-04-18 03:37:18,858 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:37:18,858 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:37:18,858 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:37:28,869 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:37:28,869 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 790.008s
2026-04-18 03:37:28,869 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:37:28,870 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:37:28,870 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:37:38,880 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:37:38,880 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 800.018s
2026-04-18 03:37:38,880 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:37:38,881 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:37:38,881 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:37:48,888 INFO BGP-Thread-1 (job): ... idle for 10.008s
2026-04-18 03:37:48,889 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 810.026s
2026-04-18 03:37:48,889 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:37:48,889 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:37:48,889 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:37:54,368 INFO BGP-Thread-1 (job): ... idle for 5.479s
2026-04-18 03:37:54,368 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 815.504s
2026-04-18 03:37:54,368 INFO BGP-Thread-1 (job): KEEP ALIVE message received: 0xffffffffffffffffffffffffffffffff001304
2026-04-18 03:37:54,369 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:37:54,369 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:37:54,369 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:38:04,379 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:38:04,379 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 825.515s
2026-04-18 03:38:04,379 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:38:04,380 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:38:04,380 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:38:14,392 INFO BGP-Thread-1 (job): ... idle for 10.012s
2026-04-18 03:38:14,392 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 835.527s
2026-04-18 03:38:14,392 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:38:14,392 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:38:14,393 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:38:18,859 INFO BGP-Thread-1 (job): ... idle for 4.467s
2026-04-18 03:38:18,860 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 839.994s
2026-04-18 03:38:18,860 INFO BGP-Thread-1 (job): KEEP ALIVE is sent.
2026-04-18 03:38:18,860 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:38:18,860 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:38:18,860 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:38:28,871 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:38:28,871 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 850.004s
2026-04-18 03:38:28,871 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:38:28,871 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:38:28,871 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:38:38,881 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:38:38,882 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 860.014s
2026-04-18 03:38:38,882 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:38:38,882 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:38:38,882 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:38:48,887 INFO BGP-Thread-1 (job): ... idle for 10.005s
2026-04-18 03:38:48,887 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 870.019s
2026-04-18 03:38:48,887 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:38:48,887 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:38:48,887 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:38:54,403 INFO BGP-Thread-1 (job): ... idle for 5.515s
2026-04-18 03:38:54,403 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 875.534s
2026-04-18 03:38:54,403 INFO BGP-Thread-1 (job): KEEP ALIVE message received: 0xffffffffffffffffffffffffffffffff001304
2026-04-18 03:38:54,403 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:38:54,403 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:38:54,403 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:39:04,414 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:39:04,414 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 885.544s
2026-04-18 03:39:04,414 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:39:04,414 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:39:04,414 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:39:14,425 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:39:14,425 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 895.555s
2026-04-18 03:39:14,425 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:39:14,425 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:39:14,425 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:39:18,866 INFO BGP-Thread-1 (job): ... idle for 4.440s
2026-04-18 03:39:18,866 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 899.995s
2026-04-18 03:39:18,866 INFO BGP-Thread-1 (job): KEEP ALIVE is sent.
2026-04-18 03:39:18,866 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:39:18,866 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:39:18,866 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:39:28,877 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:39:28,877 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 910.005s
2026-04-18 03:39:28,877 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:39:28,877 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:39:28,877 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:39:38,888 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:39:38,888 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 920.015s
2026-04-18 03:39:38,888 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:39:38,888 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:39:38,888 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:39:48,898 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:39:48,899 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 930.025s
2026-04-18 03:39:48,899 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:39:48,899 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:39:48,899 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:39:54,441 INFO BGP-Thread-1 (job): ... idle for 5.541s
2026-04-18 03:39:54,441 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 935.567s
2026-04-18 03:39:54,441 INFO BGP-Thread-1 (job): KEEP ALIVE message received: 0xffffffffffffffffffffffffffffffff001304
2026-04-18 03:39:54,441 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:39:54,441 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:39:54,441 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:40:04,452 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:40:04,452 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 945.577s
2026-04-18 03:40:04,452 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:40:04,452 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:40:04,453 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:40:14,463 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:40:14,463 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 955.587s
2026-04-18 03:40:14,463 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:40:14,463 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:40:14,463 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:40:18,871 INFO BGP-Thread-1 (job): ... idle for 4.408s
2026-04-18 03:40:18,871 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 959.995s
2026-04-18 03:40:18,871 INFO BGP-Thread-1 (job): KEEP ALIVE is sent.
2026-04-18 03:40:18,872 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:40:18,872 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:40:18,872 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:40:28,884 INFO BGP-Thread-1 (job): ... idle for 10.012s
2026-04-18 03:40:28,885 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 970.007s
2026-04-18 03:40:28,885 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:40:28,885 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:40:28,885 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:40:38,895 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:40:38,896 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 980.017s
2026-04-18 03:40:38,896 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:40:38,896 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:40:38,896 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:40:48,906 INFO BGP-Thread-1 (job): ... idle for 10.010s
2026-04-18 03:40:48,907 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 990.027s
2026-04-18 03:40:48,907 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:40:48,907 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:40:48,907 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
2026-04-18 03:40:54,444 INFO BGP-Thread-1 (job): ... idle for 5.537s
2026-04-18 03:40:54,445 INFO BGP-Thread-1 (job): total_rx_idle_time_counter: 995.565s
2026-04-18 03:40:54,445 INFO BGP-Thread-1 (job): KEEP ALIVE message received: 0xffffffffffffffffffffffffffffffff001304
2026-04-18 03:40:54,445 INFO BGP-Thread-1 (job): total_received_update_message_counter: 1
2026-04-18 03:40:54,445 INFO BGP-Thread-1 (job): total_received_nlri_prefix_counter: 0
2026-04-18 03:40:54,445 INFO BGP-Thread-1 (job): total_received_withdrawn_prefix_counter: 0
Traceback (most recent call last):
  File "/home/jenkins/play.py", line 2543, in &lt;module&gt;
    threaded_job(arguments)
  File "/home/jenkins/play.py", line 2537, in threaded_job
    rpcserver.serve_forever()
  File "/usr/lib/python3.10/socketserver.py", line 232, in serve_forever
    ready = selector.select(poll_interval)
  File "/usr/lib/python3.10/selectors.py", line 416, in select
    fd_event_list = self._selector.poll(timeout)
KeyboardInterrupt</msg>
<arg>${output_log}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:40:58.002580" elapsed="0.001530"/>
</kw>
<doc>Send all output produced by the play.py utility to Robot logs.
This needs to be called if your suite detects play.py crashing and bypasses
Kill_BGP_Speaker in that case otherwise the output of play.py (which most
likely contains clues about why it crashed) will be lost.</doc>
<status status="PASS" start="2026-04-18T03:40:57.989883" elapsed="0.014310"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<status status="PASS" start="2026-04-18T03:40:58.004471" elapsed="0.000045"/>
</return>
<status status="PASS" start="2026-04-18T03:40:58.004295" elapsed="0.000286"/>
</branch>
<status status="PASS" start="2026-04-18T03:40:58.004265" elapsed="0.000352"/>
</if>
<kw name="Log" owner="BuiltIn">
<arg>${message}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-18T03:40:58.004829" elapsed="0.000030"/>
</kw>
<kw name="Fail" owner="BuiltIn">
<arg>The prompt was not seen within timeout period.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:40:58.005108" elapsed="0.000030"/>
</kw>
<doc>Interrupt play.py, fail if no prompt is seen within SSHLibrary timeout.
Also dump the logs with the output the program produced.
This keyword is also suitable for stopping BGP manager.</doc>
<status status="PASS" start="2026-04-18T03:40:57.969639" elapsed="0.035579"/>
</kw>
<kw name="Do_Not_Fail_Fast_From_Now_On" owner="FailFast">
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-18T03:40:58.006394" level="INFO">${SuiteFastFail} = False</msg>
<arg>${SuiteFastFail}</arg>
<arg>False</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-18T03:40:58.005926" elapsed="0.000527"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-04-18T03:40:58.005501" elapsed="0.001092"/>
</kw>
<kw name="Teardown_Test_Show_Bugs_If_Test_Failed" owner="SetupUtils" type="TEARDOWN">
<kw name="SetupUtils__Report_Bugs_Causing_Failure" owner="SetupUtils">
<if>
<branch type="IF" condition="'${SetupUtils__Known_Bug_ID}' != ''">
<kw name="Report Failure Due To Bug" owner="Utils">
<arg>${SetupUtils__Known_Bug_ID}</arg>
<doc>Report that a test failed due to a known Bugzilla bug whose
number is provided as an argument.
Not FAILED (incl. SKIPPED) test are not reported.
This keyword must be used in the [Teardown] setting of the affected test
or as the first line of the test if FastFail module is not being
used. It reports the URL of the bug on console and also puts it
into the Robot log file.</doc>
<status status="NOT RUN" start="2026-04-18T03:40:58.008491" elapsed="0.000059"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:40:58.007896" elapsed="0.000740"/>
</branch>
<status status="PASS" start="2026-04-18T03:40:58.007860" elapsed="0.000814"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>'${SetupUtils__Known_Bug_ID}' != ''</arg>
<arg>Set_Known_Bug_Id</arg>
<arg>${EMPTY}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:40:58.008892" elapsed="0.000503"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:40:58.017141" level="INFO">${test_skipped} = False</msg>
<var>${test_skipped}</var>
<arg>len(re.findall('SKIPPED', """${TEST_MESSAGE}""")) &gt; 0</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:40:58.016398" elapsed="0.000786"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-04-18T03:40:58.017452" elapsed="0.000031"/>
</return>
<status status="PASS" start="2026-04-18T03:40:58.017299" elapsed="0.000215"/>
</branch>
<status status="PASS" start="2026-04-18T03:40:58.017269" elapsed="0.000287"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-18T03:40:58.017709" elapsed="0.000026"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<var>${reference}</var>
<arg>${SUITE_NAME}_${TEST_NAME}</arg>
<arg>[ /\.-]</arg>
<arg>_</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="NOT RUN" start="2026-04-18T03:40:58.017900" elapsed="0.000021"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="NOT RUN" start="2026-04-18T03:40:58.018073" elapsed="0.000020"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${msg}</var>
<arg>... click for list of related bugs or create a new one if needed (with the${newline}"${reference}"${newline}reference somewhere inside)</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:40:58.018240" elapsed="0.000020"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${bugs}</var>
<arg>"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=${reference}&amp;order=bug_status"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:40:58.018404" elapsed="0.000019"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="NOT RUN" start="2026-04-18T03:40:58.018585" elapsed="0.000021"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-18T03:40:58.018762" elapsed="0.000021"/>
</kw>
<doc>Report that a test failed and point to linked Bugzilla bug(s).
Linked bugs must contain the ${reference} inside comments (workaround
becasue of currently missing suitable field for external references and
not correctly working the CONTENT MATCHES filter).
Not FAILED (incl. SKIPPED) test are not reported.
This keyword must be used in the [Teardown] setting of the affected test
or as the first line of the test if FastFail module is not being
used. It reports the URL of the bug on console and also puts it
into the Robot log file.</doc>
<status status="PASS" start="2026-04-18T03:40:58.015932" elapsed="0.002909"/>
</kw>
<status status="PASS" start="2026-04-18T03:40:58.007557" elapsed="0.011336"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-04-18T03:40:58.007003" elapsed="0.011932"/>
</kw>
<doc>Abort the Python speaker. Also, attempt to stop failing fast.</doc>
<tag>critical</tag>
<status status="PASS" start="2026-04-18T03:40:57.853190" elapsed="0.165787"/>
</test>
<test id="s1-s2-t15" name="Store_Results_For_Listening_BGP_Speaker" line="198">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-18T03:40:58.022707" elapsed="0.000269"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-18T03:40:58.022420" elapsed="0.000614"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:40:58.024076" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:40:58.023958" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-04-18T03:40:58.023937" elapsed="0.000264"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:40:58.029251" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:40:58.029134" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-04-18T03:40:58.029113" elapsed="0.000211"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-18T03:40:58.031115" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-18T03:40:58.029989" elapsed="0.001157"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-18T03:40:58.031645" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-18T03:40:58.031315" elapsed="0.000357"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-18T03:40:58.031719" elapsed="0.000037"/>
</return>
<msg time="2026-04-18T03:40:58.031888" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-18T03:40:58.029585" elapsed="0.002329"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:40:58.037593" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:40:58.037455" elapsed="0.000188"/>
</branch>
<status status="PASS" start="2026-04-18T03:40:58.037432" elapsed="0.000233"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:40:58.038961" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:40:58.038852" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-18T03:40:58.038834" elapsed="0.000196"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-18T03:40:58.039518" level="INFO">${karaf_connection_index} = 4</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-18T03:40:58.039199" elapsed="0.000365"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-18T03:40:58.039957" level="INFO">${current_connection_index} = 7</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:40:58.039728" elapsed="0.000255"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-18T03:40:58.071990" 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 "b "g "p "c "e "p "- "b "g "p "- "i "n "g "e "s "t "[78C- "[A[78Cm</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-18T03:40:58.040510" elapsed="0.031662"/>
</kw>
<msg time="2026-04-18T03:40:58.072386" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-18T03:40:58.072434" 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 "b "g "p "c "e "p "- "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:40:58.040148" elapsed="0.032324"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-18T03:40:58.107970" level="INFO">"i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "S "t "o "r "e "_ "R "e "s "u "l "t "s "_ "F "o "r "_ "L "i "s "t "e "n "i "n "g "_ "B "G "P "_ "S "p "e "a "k "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-18T03:40:58.073176" elapsed="0.034951"/>
</kw>
<msg time="2026-04-18T03:40:58.108466" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-18T03:40:58.108515" level="INFO">${message_wait} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "S "t "o "r "e "_ "R "...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:40:58.072736" elapsed="0.035841"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:40:58.108977" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:40:58.108691" elapsed="0.000374"/>
</branch>
<status status="PASS" start="2026-04-18T03:40:58.108655" elapsed="0.000441"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:40:58.109657" level="INFO"> "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "S "t "o "r "e "_ "R "e "s "u "l "t "s "_ "F "o "r "_ "L "i "s "t "e "n "i "n "g "_ "B "G "P "_ "S "p "e "a "k "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:40:58.109266" elapsed="0.000473"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:40:58.110033" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:40:58.109809" elapsed="0.000280"/>
</branch>
<status status="PASS" start="2026-04-18T03:40:58.109789" elapsed="0.000324"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-18T03:40:58.110151" elapsed="0.000043"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:40:58.113002" elapsed="0.000233"/>
</kw>
<msg time="2026-04-18T03:40:58.113311" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:40:58.111792" elapsed="0.001666"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="NOT RUN" start="2026-04-18T03:40:58.113770" elapsed="0.000087"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:40:58.114128" elapsed="0.000079"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-18T03:40:58.111078" elapsed="0.003257"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-18T03:40:58.110484" elapsed="0.003918"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-18T03:40:58.038488" elapsed="0.076015"/>
</kw>
<msg time="2026-04-18T03:40:58.114622" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:40:58.114667" level="INFO">${message} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "S "t "o "r "e "_ "R "...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:40:58.037825" elapsed="0.076880"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:40:58.114895" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-18T03:40:58.114784" elapsed="0.000172"/>
</branch>
<status status="PASS" start="2026-04-18T03:40:58.114764" 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-04-18T03:40:58.115409" elapsed="0.000026"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-18T03:40:58.115787" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:40:58.115860" elapsed="0.000015"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-18T03:40:58.037044" elapsed="0.078926"/>
</kw>
<msg time="2026-04-18T03:40:58.116065" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:40:58.116111" level="INFO">${output} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "S "t "o "r "e "_ "R "...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:40:58.032323" elapsed="0.083825"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:40:58.116486" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:40:58.116224" elapsed="0.000334"/>
</branch>
<status status="PASS" start="2026-04-18T03:40:58.116206" elapsed="0.000376"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-18T03:40:58.032173" elapsed="0.084434"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-18T03:40:58.031975" elapsed="0.084667"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-18T03:40:58.028697" elapsed="0.088002"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-18T03:40:58.023654" elapsed="0.093100"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:40:58.023192" elapsed="0.093608"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-18T03:40:58.019945" elapsed="0.096909"/>
</kw>
<kw name="Store_File_To_Workspace">
<kw name="List Files In Directory" owner="SSHLibrary">
<msg time="2026-04-18T03:40:58.126524" level="INFO">10 files:
.bash_logout
.bashrc
.profile
bgp_peer.log
ipaddr.py
lf-env.sh
performance-bgp.csv
play.py
play.py.out
totals-bgp.csv</msg>
<msg time="2026-04-18T03:40:58.126818" level="INFO">${files} = ['.bash_logout', '.bashrc', '.profile', 'bgp_peer.log', 'ipaddr.py', 'lf-env.sh', 'performance-bgp.csv', 'play.py', 'play.py.out', 'totals-bgp.csv']</msg>
<var>${files}</var>
<arg>.</arg>
<doc>A wrapper for `List Directory` that returns only files.</doc>
<status status="PASS" start="2026-04-18T03:40:58.117663" elapsed="0.009197"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-18T03:40:58.127489" level="INFO">Executing command 'cat totals-bgp.csv'.</msg>
<msg time="2026-04-18T03:40:58.139673" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-18T03:40:58.139817" level="INFO">${output_log} = +10/-9 routes per UPDATE
249990</msg>
<var>${output_log}</var>
<arg>cat ${src_file_name}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-18T03:40:58.127211" elapsed="0.012640"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:40:58.140572" level="INFO">+10/-9 routes per UPDATE
249990</msg>
<arg>${output_log}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:40:58.140090" elapsed="0.000554"/>
</kw>
<kw name="Create File" owner="OperatingSystem">
<msg time="2026-04-18T03:40:58.141622" level="INFO" html="true">Created file '&lt;a href="file:///w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/totals-bgp.csv"&gt;/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/totals-bgp.csv&lt;/a&gt;'.</msg>
<arg>${dst_file_name}</arg>
<arg>${output_log}</arg>
<doc>Creates a file with the given content and encoding.</doc>
<status status="PASS" start="2026-04-18T03:40:58.140941" elapsed="0.000836"/>
</kw>
<arg>totals-${RESULTS_FILE_NAME}</arg>
<arg>totals-${RESULTS_FILE_NAME}</arg>
<doc>Store the provided file from the SSH client to workspace.</doc>
<status status="PASS" start="2026-04-18T03:40:58.117209" elapsed="0.024668"/>
</kw>
<kw name="Store_File_To_Workspace">
<kw name="List Files In Directory" owner="SSHLibrary">
<msg time="2026-04-18T03:40:58.180616" level="INFO">10 files:
.bash_logout
.bashrc
.profile
bgp_peer.log
ipaddr.py
lf-env.sh
performance-bgp.csv
play.py
play.py.out
totals-bgp.csv</msg>
<msg time="2026-04-18T03:40:58.180846" level="INFO">${files} = ['.bash_logout', '.bashrc', '.profile', 'bgp_peer.log', 'ipaddr.py', 'lf-env.sh', 'performance-bgp.csv', 'play.py', 'play.py.out', 'totals-bgp.csv']</msg>
<var>${files}</var>
<arg>.</arg>
<doc>A wrapper for `List Directory` that returns only files.</doc>
<status status="PASS" start="2026-04-18T03:40:58.142739" elapsed="0.038166"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-18T03:40:58.181688" level="INFO">Executing command 'cat performance-bgp.csv'.</msg>
<msg time="2026-04-18T03:40:58.193911" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-18T03:40:58.194130" level="INFO">${output_log} = +10/-9 routes per UPDATE
10098</msg>
<var>${output_log}</var>
<arg>cat ${src_file_name}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-18T03:40:58.181328" elapsed="0.012859"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:40:58.195279" level="INFO">+10/-9 routes per UPDATE
10098</msg>
<arg>${output_log}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:40:58.194665" elapsed="0.000719"/>
</kw>
<kw name="Create File" owner="OperatingSystem">
<msg time="2026-04-18T03:40:58.196673" level="INFO" html="true">Created file '&lt;a href="file:///w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/performance-bgp.csv"&gt;/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/performance-bgp.csv&lt;/a&gt;'.</msg>
<arg>${dst_file_name}</arg>
<arg>${output_log}</arg>
<doc>Creates a file with the given content and encoding.</doc>
<status status="PASS" start="2026-04-18T03:40:58.195873" elapsed="0.000929"/>
</kw>
<arg>performance-${RESULTS_FILE_NAME}</arg>
<arg>performance-${RESULTS_FILE_NAME}</arg>
<doc>Store the provided file from the SSH client to workspace.</doc>
<status status="PASS" start="2026-04-18T03:40:58.142127" elapsed="0.054888"/>
</kw>
<kw name="Store_File_To_Workspace">
<kw name="List Files In Directory" owner="SSHLibrary">
<msg time="2026-04-18T03:40:58.237486" level="INFO">10 files:
.bash_logout
.bashrc
.profile
bgp_peer.log
ipaddr.py
lf-env.sh
performance-bgp.csv
play.py
play.py.out
totals-bgp.csv</msg>
<msg time="2026-04-18T03:40:58.237913" level="INFO">${files} = ['.bash_logout', '.bashrc', '.profile', 'bgp_peer.log', 'ipaddr.py', 'lf-env.sh', 'performance-bgp.csv', 'play.py', 'play.py.out', 'totals-bgp.csv']</msg>
<var>${files}</var>
<arg>.</arg>
<doc>A wrapper for `List Directory` that returns only files.</doc>
<status status="PASS" start="2026-04-18T03:40:58.198425" elapsed="0.039567"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-18T03:40:58.239057" level="INFO">Executing command 'cat totals-bgp.csv'.</msg>
<msg time="2026-04-18T03:40:58.251463" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-18T03:40:58.251737" level="INFO">${output_log} = +10/-9 routes per UPDATE
249990</msg>
<var>${output_log}</var>
<arg>cat ${src_file_name}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-18T03:40:58.238569" elapsed="0.013226"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:40:58.252931" level="INFO">+10/-9 routes per UPDATE
249990</msg>
<arg>${output_log}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:40:58.252237" elapsed="0.000796"/>
</kw>
<kw name="Create File" owner="OperatingSystem">
<msg time="2026-04-18T03:40:58.254247" level="INFO" html="true">Created file '&lt;a href="file:///w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/prefixcount-listening-totals-bgp.csv"&gt;/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/prefixcount-listening-totals-bgp.csv&lt;/a&gt;'.</msg>
<arg>${dst_file_name}</arg>
<arg>${output_log}</arg>
<doc>Creates a file with the given content and encoding.</doc>
<status status="PASS" start="2026-04-18T03:40:58.253492" elapsed="0.000883"/>
</kw>
<arg>totals-${RESULTS_FILE_NAME}</arg>
<arg>prefixcount-listening-totals-${RESULTS_FILE_NAME}</arg>
<doc>Store the provided file from the SSH client to workspace.</doc>
<status status="PASS" start="2026-04-18T03:40:58.197446" elapsed="0.057118"/>
</kw>
<kw name="Store_File_To_Workspace">
<kw name="List Files In Directory" owner="SSHLibrary">
<msg time="2026-04-18T03:40:58.295734" level="INFO">10 files:
.bash_logout
.bashrc
.profile
bgp_peer.log
ipaddr.py
lf-env.sh
performance-bgp.csv
play.py
play.py.out
totals-bgp.csv</msg>
<msg time="2026-04-18T03:40:58.295882" level="INFO">${files} = ['.bash_logout', '.bashrc', '.profile', 'bgp_peer.log', 'ipaddr.py', 'lf-env.sh', 'performance-bgp.csv', 'play.py', 'play.py.out', 'totals-bgp.csv']</msg>
<var>${files}</var>
<arg>.</arg>
<doc>A wrapper for `List Directory` that returns only files.</doc>
<status status="PASS" start="2026-04-18T03:40:58.256577" elapsed="0.039342"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-18T03:40:58.296406" level="INFO">Executing command 'cat performance-bgp.csv'.</msg>
<msg time="2026-04-18T03:40:58.308267" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-18T03:40:58.308405" level="INFO">${output_log} = +10/-9 routes per UPDATE
10098</msg>
<var>${output_log}</var>
<arg>cat ${src_file_name}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-18T03:40:58.296195" elapsed="0.012245"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:40:58.309082" level="INFO">+10/-9 routes per UPDATE
10098</msg>
<arg>${output_log}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:40:58.308700" elapsed="0.000487"/>
</kw>
<kw name="Create File" owner="OperatingSystem">
<msg time="2026-04-18T03:40:58.309915" level="INFO" html="true">Created file '&lt;a href="file:///w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/prefixcount-listening-performance-bgp.csv"&gt;/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/prefixcount-listening-performance-bgp.csv&lt;/a&gt;'.</msg>
<arg>${dst_file_name}</arg>
<arg>${output_log}</arg>
<doc>Creates a file with the given content and encoding.</doc>
<status status="PASS" start="2026-04-18T03:40:58.309447" elapsed="0.000546"/>
</kw>
<arg>performance-${RESULTS_FILE_NAME}</arg>
<arg>prefixcount-listening-performance-${RESULTS_FILE_NAME}</arg>
<doc>Store the provided file from the SSH client to workspace.</doc>
<status status="PASS" start="2026-04-18T03:40:58.254926" elapsed="0.055157"/>
</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">
<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-04-18T03:40:58.311414" elapsed="0.000583"/>
</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-04-18T03:40:58.314073" elapsed="0.000057"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:40:58.313043" elapsed="0.001248"/>
</branch>
<status status="PASS" start="2026-04-18T03:40:58.312996" elapsed="0.001356"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>'${SetupUtils__Known_Bug_ID}' != ''</arg>
<arg>Set_Known_Bug_Id</arg>
<arg>${EMPTY}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:40:58.314727" elapsed="0.001013"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:40:58.322287" level="INFO">${test_skipped} = False</msg>
<var>${test_skipped}</var>
<arg>len(re.findall('SKIPPED', """${TEST_MESSAGE}""")) &gt; 0</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:40:58.321861" elapsed="0.000454"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-04-18T03:40:58.322554" elapsed="0.000039"/>
</return>
<status status="PASS" start="2026-04-18T03:40:58.322390" elapsed="0.000236"/>
</branch>
<status status="PASS" start="2026-04-18T03:40:58.322370" elapsed="0.000281"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-18T03:40:58.322804" elapsed="0.000020"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<var>${reference}</var>
<arg>${SUITE_NAME}_${TEST_NAME}</arg>
<arg>[ /\.-]</arg>
<arg>_</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="NOT RUN" start="2026-04-18T03:40:58.322976" elapsed="0.000020"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="NOT RUN" start="2026-04-18T03:40:58.323150" elapsed="0.000020"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${msg}</var>
<arg>... click for list of related bugs or create a new one if needed (with the${newline}"${reference}"${newline}reference somewhere inside)</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:40:58.323319" elapsed="0.000019"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${bugs}</var>
<arg>"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=${reference}&amp;order=bug_status"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:40:58.323485" elapsed="0.000020"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="NOT RUN" start="2026-04-18T03:40:58.323676" elapsed="0.000021"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-18T03:40:58.323841" elapsed="0.000020"/>
</kw>
<doc>Report that a test failed and point to linked Bugzilla bug(s).
Linked bugs must contain the ${reference} inside comments (workaround
becasue of currently missing suitable field for external references and
not correctly working the CONTENT MATCHES filter).
Not FAILED (incl. SKIPPED) test are not reported.
This keyword must be used in the [Teardown] setting of the affected test
or as the first line of the test if FastFail module is not being
used. It reports the URL of the bug on console and also puts it
into the Robot log file.</doc>
<status status="PASS" start="2026-04-18T03:40:58.321545" elapsed="0.002373"/>
</kw>
<status status="PASS" start="2026-04-18T03:40:58.312554" elapsed="0.011413"/>
</kw>
<doc>Test case teardown. Show linked bugs and start fast failing in case of failure.</doc>
<status status="PASS" start="2026-04-18T03:40:58.310690" elapsed="0.013319"/>
</kw>
<doc>Store results for plotting</doc>
<status status="PASS" start="2026-04-18T03:40:58.019332" elapsed="0.304716"/>
</test>
<test id="s1-s2-t16" name="Wait_For_Stable_Ipv4_Topology_After_Listening" line="208">
<kw name="Setup_Test_With_Logging_And_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Fail_This_Fast_On_Previous_Error" owner="FailFast">
<if>
<branch type="IF" condition="'''${SuiteFastFail}'''=='True'">
<kw name="Fail" owner="BuiltIn">
<arg>SKIPPED due to a failure in a previous fundamental test case.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:40:58.328179" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:40:58.327960" elapsed="0.000275"/>
</branch>
<status status="PASS" start="2026-04-18T03:40:58.327942" elapsed="0.000317"/>
</if>
<doc>Mark (immediately) this test case as failed when fast-fail is enabled in suite.</doc>
<status status="PASS" start="2026-04-18T03:40:58.327774" 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-04-18T03:40:58.329345" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:40:58.329235" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-18T03:40:58.329217" 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-04-18T03:40:58.334639" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:40:58.334512" elapsed="0.000175"/>
</branch>
<status status="PASS" start="2026-04-18T03:40:58.334494" elapsed="0.000216"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-18T03:40:58.335729" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-18T03:40:58.335323" elapsed="0.000433"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-18T03:40:58.336221" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-18T03:40:58.335920" elapsed="0.000327"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-18T03:40:58.336291" elapsed="0.000031"/>
</return>
<msg time="2026-04-18T03:40:58.336448" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-18T03:40:58.334943" elapsed="0.001530"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:40:58.341901" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:40:58.341794" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-18T03:40:58.341774" elapsed="0.000237"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:40:58.343203" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:40:58.343096" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-18T03:40:58.343078" elapsed="0.000195"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-18T03:40:58.343760" level="INFO">${karaf_connection_index} = 4</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-18T03:40:58.343421" elapsed="0.000366"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-18T03:40:58.344174" level="INFO">${current_connection_index} = 7</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:40:58.343950" elapsed="0.000250"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-18T03:40:58.384968" 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 "b "g "p "c "e "p "- "b "g "p "- "i "n "g "e "s "t "[78C- "[A[78Cm</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-18T03:40:58.344726" elapsed="0.040381"/>
</kw>
<msg time="2026-04-18T03:40:58.385339" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-18T03:40:58.385395" 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 "b "g "p "c "e "p "- "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:40:58.344367" elapsed="0.041066"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-18T03:40:58.447787" level="INFO">"i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "W "a "i "t "_ "F "o "r "_ "S "t "a "b "l "e "_ "I "p "v "4 "_ "T "o "p "o "l "o "g "y "_ "A "f "t "e "r "_ "L "i "s "t "e "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-04-18T03:40:58.386035" elapsed="0.061919"/>
</kw>
<msg time="2026-04-18T03:40:58.448145" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-18T03:40:58.448192" level="INFO">${message_wait} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "W "a "i "t "_ "F "o "...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:40:58.385655" elapsed="0.062579"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:40:58.448661" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:40:58.448346" elapsed="0.000375"/>
</branch>
<status status="PASS" start="2026-04-18T03:40:58.448315" elapsed="0.000433"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:40:58.449293" level="INFO"> "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "W "a "i "t "_ "F "o "r "_ "S "t "a "b "l "e "_ "I "p "v "4 "_ "T "o "p "o "l "o "g "y "_ "A "f "t "e "r "_ "L "i "s "t "e "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-04-18T03:40:58.448898" 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-04-18T03:40:58.449697" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:40:58.449450" elapsed="0.000303"/>
</branch>
<status status="PASS" start="2026-04-18T03:40:58.449431" elapsed="0.000345"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-18T03:40:58.449813" elapsed="0.000039"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:40:58.452681" elapsed="0.000348"/>
</kw>
<msg time="2026-04-18T03:40:58.453093" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:40:58.451406" elapsed="0.001856"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="NOT RUN" start="2026-04-18T03:40:58.453588" elapsed="0.000084"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:40:58.453943" elapsed="0.000082"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-18T03:40:58.450724" elapsed="0.003418"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-18T03:40:58.450124" elapsed="0.004086"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-18T03:40:58.342792" elapsed="0.111711"/>
</kw>
<msg time="2026-04-18T03:40:58.454623" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:40:58.454669" level="INFO">${message} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "W "a "i "t "_ "F "o "...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:40:58.342170" elapsed="0.112537"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:40:58.454897" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-18T03:40:58.454787" elapsed="0.000219"/>
</branch>
<status status="PASS" start="2026-04-18T03:40:58.454767" elapsed="0.000267"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:40:58.455459" elapsed="0.000026"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-18T03:40:58.455829" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:40:58.455903" elapsed="0.000016"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-18T03:40:58.341442" elapsed="0.114572"/>
</kw>
<msg time="2026-04-18T03:40:58.456111" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:40:58.456157" level="INFO">${output} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "W "a "i "t "_ "F "o "...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:40:58.336869" elapsed="0.119327"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:40:58.456564" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:40:58.456273" elapsed="0.000348"/>
</branch>
<status status="PASS" start="2026-04-18T03:40:58.456255" elapsed="0.000390"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-18T03:40:58.336722" elapsed="0.119948"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-18T03:40:58.336542" elapsed="0.120160"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-18T03:40:58.334136" elapsed="0.122621"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-18T03:40:58.328912" elapsed="0.127903"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:40:58.328456" elapsed="0.128408"/>
</kw>
<doc>Test case setup which skips on previous failure. If not, logs test case name to Karaf log.
Recommended to be used as the default test case setup.</doc>
<status status="PASS" start="2026-04-18T03:40:58.325166" elapsed="0.131753"/>
</kw>
<kw name="Wait_For_Ipv4_Topology_Prefixes_To_Become_Stable" owner="PrefixCounting">
<if>
<branch type="IF" condition="&quot;&quot;&quot;${shards_list}&quot;&quot;&quot;==&quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="Closure_From_Keyword_And_Arguments" owner="ScalarClosures">
<return>
<value>${keyword}</value>
<value>${args}</value>
<value>${kwargs}</value>
<status status="PASS" start="2026-04-18T03:40:58.475938" elapsed="0.000030"/>
</return>
<msg time="2026-04-18T03:40:58.476152" level="INFO">${getter} = ['Get_Ipv4_Topology_Count', [], {'session': 'operational', 'topology': 'example-ipv4-topology'}]</msg>
<var>${getter}</var>
<arg>Get_Ipv4_Topology_Count</arg>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>Turn keyword with given arguments into a scalar closure.</doc>
<status status="PASS" start="2026-04-18T03:40:58.475582" elapsed="0.000597"/>
</kw>
<status status="PASS" start="2026-04-18T03:40:58.473454" elapsed="0.002765"/>
</branch>
<branch type="ELSE">
<kw name="Closure_From_Keyword_And_Arguments" owner="ScalarClosures">
<var>${getter}</var>
<arg>Get_Ipv4_Topology_Count_With_Shards_Check</arg>
<arg>${shards_list}</arg>
<arg>${shards_details}</arg>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>Turn keyword with given arguments into a scalar closure.</doc>
<status status="NOT RUN" start="2026-04-18T03:40:58.476451" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:40:58.476244" elapsed="0.000277"/>
</branch>
<status status="PASS" start="2026-04-18T03:40:58.473435" elapsed="0.003125"/>
</if>
<kw name="Closure_From_Keyword_And_Arguments" owner="ScalarClosures">
<return>
<value>${keyword}</value>
<value>${args}</value>
<value>${kwargs}</value>
<status status="PASS" start="2026-04-18T03:40:58.477140" elapsed="0.000032"/>
</return>
<msg time="2026-04-18T03:40:58.477407" level="INFO">${validator} = ['WaitUtils.Excluding_Stability_Safe_Stateful_Validator_As_Keyword', ['state_holder', 'data_holder'], {'excluded_value': '250000'}]</msg>
<var>${validator}</var>
<arg>WaitUtils.Excluding_Stability_Safe_Stateful_Validator_As_Keyword</arg>
<arg>state_holder</arg>
<arg>data_holder</arg>
<arg>excluded_value=${excluded_count}</arg>
<doc>Turn keyword with given arguments into a scalar closure.</doc>
<status status="PASS" start="2026-04-18T03:40:58.476797" elapsed="0.000639"/>
</kw>
<kw name="Wait_For_Getter_Error_Or_Safe_Stateful_Validator_Consecutive_Success" owner="WaitUtils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:40:58.478891" level="INFO">${tmp} = 1</msg>
<var>${tmp}</var>
<arg>int(${count})</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:40:58.478504" elapsed="0.000415"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:40:58.479351" level="INFO">count=1</msg>
<arg>count=${tmp}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:40:58.479079" elapsed="0.000317"/>
</kw>
<kw name="WaitUtils__Check_Sanity_And_Compute_Derived_Times" owner="WaitUtils">
<if>
<branch type="IF" condition="int(${count}) &lt; 1">
<kw name="Fail" owner="BuiltIn">
<arg>\${count} is ${count} and not at least 1.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:40:58.480349" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:40:58.480117" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-04-18T03:40:58.480099" elapsed="0.000329"/>
</if>
<kw name="Convert Time" owner="DateTime">
<msg time="2026-04-18T03:40:58.480872" level="INFO">${period_in_seconds} = 60.0</msg>
<var>${period_in_seconds}</var>
<arg>${period}</arg>
<arg>result_format=number</arg>
<doc>Converts between supported `time formats`.</doc>
<status status="PASS" start="2026-04-18T03:40:58.480588" elapsed="0.000311"/>
</kw>
<if>
<branch type="IF" condition="${period_in_seconds} &lt;= 0.0">
<kw name="Fail" owner="BuiltIn">
<arg>\${period} ${period} has to be positive.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:40:58.481191" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:40:58.480969" elapsed="0.000355"/>
</branch>
<status status="PASS" start="2026-04-18T03:40:58.480952" elapsed="0.000400"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:40:58.481696" level="INFO">${date_now} = 2026-04-18 03:40:58.482</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:40:58.481504" elapsed="0.000219"/>
</kw>
<kw name="Convert Time" owner="DateTime">
<msg time="2026-04-18T03:40:58.482135" level="INFO">${timeout_in_seconds} = 980.0</msg>
<var>${timeout_in_seconds}</var>
<arg>${timeout}</arg>
<arg>result_format=number</arg>
<doc>Converts between supported `time formats`.</doc>
<status status="PASS" start="2026-04-18T03:40:58.481892" elapsed="0.000268"/>
</kw>
<kw name="Add Time To Date" owner="DateTime">
<msg time="2026-04-18T03:40:58.482656" level="INFO">${date_deadline} = 2026-04-18 03:57:18.482</msg>
<var>${date_deadline}</var>
<arg>${date_now}</arg>
<arg>${timeout_in_seconds}</arg>
<doc>Adds time to date and returns the resulting date.</doc>
<status status="PASS" start="2026-04-18T03:40:58.482321" elapsed="0.000361"/>
</kw>
<return>
<value>${timeout_in_seconds}</value>
<value>${period_in_seconds}</value>
<value>${date_deadline}</value>
<status status="PASS" start="2026-04-18T03:40:58.482731" elapsed="0.000030"/>
</return>
<msg time="2026-04-18T03:40:58.482981" level="INFO">${timeout_in_seconds} = 980.0</msg>
<msg time="2026-04-18T03:40:58.483027" level="INFO">${period_in_seconds} = 60.0</msg>
<msg time="2026-04-18T03:40:58.483068" level="INFO">${date_deadline} = 2026-04-18 03:57:18.482</msg>
<var>${timeout_in_seconds}</var>
<var>${period_in_seconds}</var>
<var>${date_deadline}</var>
<arg>timeout=${timeout}</arg>
<arg>period=${period}</arg>
<arg>count=${count}</arg>
<doc>Common checks for argument values. Return times in seconds and deadline date implied by timeout time.</doc>
<status status="PASS" start="2026-04-18T03:40:58.479698" elapsed="0.003392"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:40:58.483711" level="INFO">${maximum_sleeps} = 17</msg>
<var>${maximum_sleeps}</var>
<arg>math.ceil(${timeout_in_seconds} / ${period_in_seconds})</arg>
<arg>modules=math</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:40:58.483260" elapsed="0.000478"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:40:58.484388" level="INFO">${result} = No result yet.</msg>
<var>${result}</var>
<arg>No result yet.</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:40:58.483913" elapsed="0.000502"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:40:58.484898" level="INFO">${state} = 250000</msg>
<var>${state}</var>
<arg>${initial_state}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:40:58.484596" elapsed="0.000328"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="Getter_And_Safe_Stateful_Validator_Have_To_Succeed_Consecutively_By_Deadline" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:40:58.486815" level="INFO">${result} = No result yet.</msg>
<var>${result}</var>
<arg>No result yet.</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:40:58.486551" elapsed="0.000297"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:40:58.487294" level="INFO">${state} = 250000</msg>
<var>${state}</var>
<arg>${initial_state}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:40:58.487009" elapsed="0.000310"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:40:58.487818" level="INFO">${sleeps} = 0</msg>
<var>${sleeps}</var>
<arg>${count} - 1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:40:58.487475" elapsed="0.000371"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:40:58.489218" level="INFO">${date_now} = 2026-04-18 03:40:58.489</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:40:58.489067" elapsed="0.000214"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:40:58.489806" level="INFO">${time_deadline} = 979.993</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:40:58.489439" elapsed="0.000393"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:40:58.490383" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:40:58.490002" elapsed="0.000407"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:40:58.490752" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:40:58.490478" elapsed="0.000328"/>
</branch>
<status status="PASS" start="2026-04-18T03:40:58.490460" elapsed="0.000369"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:40:58.488456" elapsed="0.002420"/>
</kw>
<msg time="2026-04-18T03:40:58.490986" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:40:58.491031" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:40:58.488019" elapsed="0.003035"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:40:58.491239" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:40:58.491134" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-18T03:40:58.491116" elapsed="0.000194"/>
</if>
<for flavor="IN RANGE">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_As_Is" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:40:58.494059" level="INFO">${keyword} = Get_Ipv4_Topology_Count</msg>
<msg time="2026-04-18T03:40:58.494107" level="INFO">${args} = []</msg>
<msg time="2026-04-18T03:40:58.494154" level="INFO">${kwargs} = {'session': 'operational', 'topology': 'example-ipv4-topology'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:40:58.493709" elapsed="0.000468"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Get_Ipv4_Topology_Count" owner="PrefixCounting">
<kw name="Get_Ipv4_Topology" owner="PrefixCounting">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:41:02.315943" level="INFO">GET Request : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01agv6blx930rdupfsp7wkuo902.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-18T03:41:02.321642" level="INFO">GET Response : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Transfer-Encoding': 'chunked'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xmlns="urn:opendaylight:params:xml:ns:yang:odl-bgp-topology-types"/&gt;&lt;/topology-types&gt;&lt;node&gt;&lt;node-id&gt;192.0.2.1&lt;/node-id&gt;&lt;igp-node-attributes xmlns="urn:TBD:params:xml:ns:yang:nt:l3-unicast-igp-topology"&gt;&lt;prefix&gt;&lt;prefix&gt;8.20.15.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.65.76.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.222.18.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.234.69.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.59.125.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.205.46.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.69.249.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.243.186.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.86.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.138.152.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.201.33.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.107.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.133.25.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.19.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.45.49.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.194.22.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.226.161.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.211.127.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.100.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.254.101.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.205.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.60.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.234.208.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.228.239.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.27.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.177.154.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.201.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.148.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.160.202.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.48.218.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.52.93.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.93.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.182.185.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.34.217.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.116.158.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.236.169.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.223.35.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.103.82.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.7.2.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.131.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.40.95.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.244.132.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.248.28.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.253.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.83.39.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.4.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.193.28.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.36.83.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.143.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.73.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.128.217.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.135.39.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.6.81.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.78.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.54.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.250.105.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.110.78.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.170.182.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.4.223.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.49.100.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.5.205.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.165.63.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.36.184.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.214.36.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.171.128.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.208.52.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.113.57.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.3.37.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.237.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.160.220.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.198.13.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.174.151.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.48.34.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.21.1.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.1.30.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.108.237.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.89.117.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.218.102.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.24.70.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.41.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.48.122.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.51.175.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.79.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.25.67.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.153.130.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.45.219.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.88.115.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.129.239.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.117.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.204.169.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.124.10.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.139.169.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.79.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.53.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.31.83.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.117.152.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.46.66.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.86.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.3.214.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.74.90.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.197.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.60.54.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.41.3.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.97.95.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.47.179.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.188.172.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.219.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.124.44.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.187.184.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.197.228.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.87.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.133.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.78.124.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.149.209.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.33.23.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.243.11.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.189.185.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.80.206.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.150.251.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.208.98.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.26.125.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.213.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.71.27.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.234.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.70.109.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.112.121.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.8.69.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.201.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.203.154.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.73.19.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.169.175.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.15.238.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.4.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.75.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.68.155.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.13.187.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.16.40.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.231.11.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.85.57.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.31.7.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.191.139.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.191.228.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.108.75.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.3.166.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.32.247.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.242.134.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.176.184.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.164.222.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.35.248.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.49.209.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.20.60.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.129.2.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.88.147.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.222.193.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.51.113.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.227.58.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.61.198.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.32.165.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.120.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.251.232.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.111.147.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.175.203.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.161.229.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.68.153.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.14.105.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.252.41.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.2.231.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.240.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.146.121.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.162.92.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.151.79.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.10.14.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.95.34.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.155.232.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.32.13.240/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.92.229.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.186.102.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.118.114.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.83.215.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.28.38.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.110.203.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.106.240.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.190.4.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.116.31.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.238.174.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.235.83.16/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.212.4.48/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.122.151.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;10.21.216.176/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.146.154.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.199.188.208/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.194.94.112/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.153.168.144/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;9.255.64.80/28&lt;/prefix&gt;&lt;/prefix&gt;&lt;prefix&gt;&lt;prefix&gt;8.237.22.16/28&lt;/pref... (set the log level to DEBUG or TRACE to see the full content) 
 </msg>
<msg time="2026-04-18T03:41:02.322339" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${PC_NW_TOPOLOGY}=${topology}?content=nonconfig</arg>
<arg>expected_status=anything</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-18T03:40:58.497376" elapsed="3.825044"/>
</kw>
<if>
<branch type="IF" condition="${response.status_code} != 200">
<kw name="Fail" owner="BuiltIn">
<arg>Get on ${topology} returned status code ${response.status_code} with message: ${response.text}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:41:02.326035" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:41:02.322966" elapsed="0.003152"/>
</branch>
<status status="PASS" start="2026-04-18T03:41:02.322677" elapsed="0.003491"/>
</if>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-18T03:41:02.326274" elapsed="0.000080"/>
</return>
<msg time="2026-04-18T03:41:02.334194" level="INFO">${topology} = &lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xml...</msg>
<var>${topology}</var>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>GET the example-ipv4-topology data, check status is 200, return the topology data.</doc>
<status status="PASS" start="2026-04-18T03:40:58.496331" elapsed="3.837987"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:41:02.424610" level="INFO">${prefix_count} = 0</msg>
<var>${prefix_count}</var>
<arg>len(re.findall('"prefix":"', '''${topology}'''))</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:41:02.334718" elapsed="0.090005"/>
</kw>
<return>
<value>${prefix_count}</value>
<status status="PASS" start="2026-04-18T03:41:02.424857" elapsed="0.000059"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Get topology. If not fail, return number of prefixes in the topology.</doc>
<status status="PASS" start="2026-04-18T03:40:58.494921" elapsed="3.930282"/>
</kw>
<msg time="2026-04-18T03:41:02.425299" level="INFO">${result} = 0</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:40:58.494351" elapsed="3.930975"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:41:02.425379" elapsed="0.000033"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure without affecting arguments.</doc>
<status status="PASS" start="2026-04-18T03:40:58.493317" elapsed="3.932193"/>
</kw>
<msg time="2026-04-18T03:41:02.425626" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:41:02.425671" level="INFO">${message} = 0</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:40:58.492760" elapsed="3.932934"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:41:02.425934" elapsed="0.028995"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:41:02.456024" elapsed="0.000038"/>
</return>
<status status="PASS" start="2026-04-18T03:41:02.455890" elapsed="0.000207"/>
</branch>
<status status="PASS" start="2026-04-18T03:41:02.455864" elapsed="0.000259"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:41:02.456289" elapsed="0.000024"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with 0.</doc>
<status status="PASS" start="2026-04-18T03:41:02.455440" elapsed="0.000932"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:41:02.456416" elapsed="0.000026"/>
</return>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:40:58.492333" elapsed="3.964221"/>
</kw>
<msg time="2026-04-18T03:41:02.456654" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:41:02.456702" level="INFO">${data} = 0</msg>
<var>${status}</var>
<var>${data}</var>
<arg>ScalarClosures.Run_Keyword_And_Collect_Garbage</arg>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:40:58.491893" elapsed="3.964832"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Getter failed: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:41:02.456905" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:41:02.456800" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-18T03:41:02.456783" elapsed="0.000193"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:41:02.458405" level="INFO">${date_now} = 2026-04-18 03:41:02.458</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:41:02.458235" elapsed="0.000198"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:41:02.458973" level="INFO">${time_deadline} = 976.024</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:41:02.458603" elapsed="0.000397"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:41:02.459583" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:41:02.459165" elapsed="0.000445"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:41:02.459932" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:41:02.459682" elapsed="0.000305"/>
</branch>
<status status="PASS" start="2026-04-18T03:41:02.459663" elapsed="0.000348"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:41:02.457646" elapsed="0.002412"/>
</kw>
<msg time="2026-04-18T03:41:02.460158" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:41:02.460203" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:41:02.457136" elapsed="0.003091"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:41:02.460524" elapsed="0.000031"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:41:02.460417" elapsed="0.000174"/>
</branch>
<status status="PASS" start="2026-04-18T03:41:02.460398" elapsed="0.000216"/>
</if>
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_After_Replacing_First_Two_Arguments" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:41:02.462604" level="INFO">${keyword} = WaitUtils.Excluding_Stability_Safe_Stateful_Validator_As_Keyword</msg>
<msg time="2026-04-18T03:41:02.462661" level="INFO">${args} = ['state_holder', 'data_holder']</msg>
<msg time="2026-04-18T03:41:02.462709" level="INFO">${kwargs} = {'excluded_value': '250000'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:41:02.462253" elapsed="0.000480"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>0</arg>
<arg>${arg1}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:41:02.462900" elapsed="0.000214"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>1</arg>
<arg>${arg2}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:41:02.463274" elapsed="0.000238"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Excluding_Stability_Safe_Stateful_Validator_As_Keyword" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:41:02.465253" level="INFO">${new_state} = 0</msg>
<var>${new_state}</var>
<arg>${data}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:41:02.464854" elapsed="0.000425"/>
</kw>
<if>
<branch type="IF" condition="${data} == ${excluded_value}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Got the excluded value.</value>
<status status="NOT RUN" start="2026-04-18T03:41:02.465521" elapsed="0.000038"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:41:02.465351" elapsed="0.000251"/>
</branch>
<status status="PASS" start="2026-04-18T03:41:02.465331" elapsed="0.000294"/>
</if>
<if>
<branch type="IF" condition="${data} != ${old_state}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Data value has changed.</value>
<status status="PASS" start="2026-04-18T03:41:02.465856" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-18T03:41:02.465679" elapsed="0.000243"/>
</branch>
<status status="PASS" start="2026-04-18T03:41:02.465663" elapsed="0.000283"/>
</if>
<return>
<value>${new_state}</value>
<value>PASS</value>
<value>Validated stable: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:41:02.465979" elapsed="0.000014"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Report failure if got the excluded value or if data value changed from last time. Useful to become validator.</doc>
<status status="PASS" start="2026-04-18T03:41:02.464383" elapsed="0.001714"/>
</kw>
<msg time="2026-04-18T03:41:02.466181" level="INFO">${result} = [0, 'FAIL', 'Data value has changed.']</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:41:02.463698" elapsed="0.002508"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:41:02.466254" elapsed="0.000026"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure with replaced first two positional arguments.</doc>
<status status="PASS" start="2026-04-18T03:41:02.461861" elapsed="0.004509"/>
</kw>
<msg time="2026-04-18T03:41:02.466466" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:41:02.466511" level="INFO">${message} = [0, 'FAIL', 'Data value has changed.']</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:41:02.461305" elapsed="0.005246"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:41:02.466719" elapsed="0.025548"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:41:02.493283" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-04-18T03:41:02.493149" elapsed="0.000204"/>
</branch>
<status status="PASS" start="2026-04-18T03:41:02.493125" elapsed="0.000253"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:41:02.493566" elapsed="0.000025"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with [0, 'FAIL', 'Data value has changed.'].</doc>
<status status="PASS" start="2026-04-18T03:41:02.492725" elapsed="0.000929"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:41:02.493700" elapsed="0.000028"/>
</return>
<msg time="2026-04-18T03:41:02.493874" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:41:02.493923" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:41:02.493965" level="INFO">${result} = Data value has changed.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>ScalarClosures.Run_Closure_After_Replacing_First_Two_Arguments</arg>
<arg>${safe_validator}</arg>
<arg>${state}</arg>
<arg>${data}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:41:02.460838" elapsed="0.033151"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Validator failed: ${result}</value>
<status status="PASS" start="2026-04-18T03:41:02.494184" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-18T03:41:02.494073" elapsed="0.000176"/>
</branch>
<status status="PASS" start="2026-04-18T03:41:02.494055" elapsed="0.000218"/>
</if>
<if>
<branch type="IF" condition="${sleeps_left} &lt;= 0">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:41:02.494367" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:41:02.494330" elapsed="0.000082"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:41:02.494314" elapsed="0.000120"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-18T03:41:02.494612" elapsed="0.000024"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:41:02.494751" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:41:02.494716" elapsed="0.000154"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:41:02.494699" elapsed="0.000198"/>
</if>
<kw name="Sleep" owner="BuiltIn">
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-04-18T03:41:02.495043" elapsed="0.000022"/>
</kw>
<var name="${sleeps_left}">0</var>
<status status="PASS" start="2026-04-18T03:40:58.491744" elapsed="4.003356"/>
</iter>
<var>${sleeps_left}</var>
<value>${count}-1</value>
<value>-1</value>
<value>-1</value>
<status status="PASS" start="2026-04-18T03:40:58.491346" elapsed="4.003788"/>
</for>
<kw name="Fail" owner="BuiltIn">
<arg>Logic error, we should have returned before.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:41:02.495291" elapsed="0.000021"/>
</kw>
<msg time="2026-04-18T03:41:02.495632" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:41:02.495680" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:41:02.495721" level="INFO">${result} = Validator failed: Data value has changed.</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>count=${count}</arg>
<arg>getter=${getter}</arg>
<arg>safe_validator=${safe_validator}</arg>
<arg>initial_state=${state}</arg>
<doc>Pass only if consecutively 1 times in a row with 60 between attempts: ${getter} creates data and ${safe_validator} passes. Validator updates its state even if it reports failure. Always return validator state, status and message.</doc>
<status status="PASS" start="2026-04-18T03:40:58.485828" elapsed="4.009917"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<value>${result}</value>
<status status="NOT RUN" start="2026-04-18T03:41:02.495947" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:41:02.495838" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-18T03:41:02.495819" elapsed="0.000193"/>
</if>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:41:02.497349" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:41:02.497435" level="FAIL">'Validator failed: Data value has changed.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:41:02.497067" elapsed="0.000438">'Validator failed: Data value has changed.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:41:02.497627" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:41:02.497670" level="INFO">${result} = 'Validator failed: Data value has changed.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:41:02.496684" elapsed="0.001009"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:41:02.497876" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:41:02.497768" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-18T03:41:02.497749" elapsed="0.000193"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:41:02.498348" level="INFO">@{message_chunks} = [ Validator failed: Data value has changed. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:41:02.498093" elapsed="0.000282"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:41:02.502015" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:41:02.502121" level="FAIL">'Validator failed: Data value has changed.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:41:02.498907" elapsed="0.003296">'Validator failed: Data value has changed.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:41:02.502347" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:41:02.502407" level="INFO">${result} = 'Validator failed: Data value has changed.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:41:02.498564" elapsed="0.003875"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:41:02.502719" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-04-18T03:41:02.502567" elapsed="0.000233"/>
</branch>
<status status="PASS" start="2026-04-18T03:41:02.502516" elapsed="0.000316"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:41:02.503038" elapsed="0.000030"/>
</kw>
<arg>${result}</arg>
<arg>Not possible to succeed within the deadline.</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:41:02.496284" elapsed="0.006964"/>
</kw>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:41:02.505144" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:41:02.505264" level="FAIL">'Validator failed: Data value has changed.' should be empty.</msg>
<arg>${message}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:41:02.504769" elapsed="0.000578">'Validator failed: Data value has changed.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:41:02.505492" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:41:02.505574" level="INFO">${result} = 'Validator failed: Data value has changed.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:41:02.504247" elapsed="0.001362"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>Got empty message.</value>
<status status="NOT RUN" start="2026-04-18T03:41:02.505866" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:41:02.505715" elapsed="0.000212"/>
</branch>
<status status="PASS" start="2026-04-18T03:41:02.505689" elapsed="0.000269"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-04-18T03:41:02.506509" level="INFO">@{message_chunks} = [ Validator failed: Data value has changed. ]</msg>
<var>@{message_chunks}</var>
<arg>${message}</arg>
<arg>${prefix}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-18T03:41:02.506168" elapsed="0.000398"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-18T03:41:02.510645" level="INFO">Length is 41.</msg>
<msg time="2026-04-18T03:41:02.510747" level="FAIL">'Validator failed: Data value has changed.' should be empty.</msg>
<arg>${message_chunks[0]}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-18T03:41:02.507284" elapsed="0.003544">'Validator failed: Data value has changed.' should be empty.</status>
</kw>
<msg time="2026-04-18T03:41:02.511028" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-18T03:41:02.511089" level="INFO">${result} = 'Validator failed: Data value has changed.' should be empty.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${message_chunks[0]}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:41:02.506814" elapsed="0.004308"/>
</kw>
<if>
<branch type="IF" condition="'${status}' != 'PASS'">
<return>
<value>${message} does not start with ${prefix}</value>
<status status="PASS" start="2026-04-18T03:41:02.511417" elapsed="0.000039"/>
</return>
<status status="PASS" start="2026-04-18T03:41:02.511227" elapsed="0.000276"/>
</branch>
<status status="PASS" start="2026-04-18T03:41:02.511200" elapsed="0.000365"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:41:02.511774" elapsed="0.000030"/>
</kw>
<arg>${result}</arg>
<arg>Getter failed</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="PASS" start="2026-04-18T03:41:02.503692" elapsed="0.008293"/>
</kw>
<kw name="Sleep" owner="BuiltIn">
<msg time="2026-04-18T03:42:02.512984" level="INFO">Slept 1 minute.</msg>
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="PASS" start="2026-04-18T03:41:02.512196" elapsed="60.001293"/>
</kw>
<var name="${try}">1</var>
<status status="PASS" start="2026-04-18T03:40:58.485258" elapsed="64.028443"/>
</iter>
<iter>
<kw name="Getter_And_Safe_Stateful_Validator_Have_To_Succeed_Consecutively_By_Deadline" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:42:02.517774" level="INFO">${result} = No result yet.</msg>
<var>${result}</var>
<arg>No result yet.</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:42:02.517281" elapsed="0.000535"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:42:02.518475" level="INFO">${state} = 0</msg>
<var>${state}</var>
<arg>${initial_state}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:42:02.518049" elapsed="0.000463"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:42:02.519270" level="INFO">${sleeps} = 0</msg>
<var>${sleeps}</var>
<arg>${count} - 1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:42:02.518764" elapsed="0.000544"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:42:02.521663" level="INFO">${date_now} = 2026-04-18 03:42:02.522</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:42:02.521395" elapsed="0.000307"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:42:02.522463" level="INFO">${time_deadline} = 915.96</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:42:02.521930" elapsed="0.000571"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:42:02.523315" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:42:02.522760" elapsed="0.000594"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:02.523918" elapsed="0.000038"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:42:02.523463" elapsed="0.000546"/>
</branch>
<status status="PASS" start="2026-04-18T03:42:02.523432" elapsed="0.000614"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:42:02.520254" elapsed="0.003865"/>
</kw>
<msg time="2026-04-18T03:42:02.524262" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:42:02.524325" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:42:02.519571" elapsed="0.004786"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:42:02.524651" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:42:02.524473" elapsed="0.000250"/>
</branch>
<status status="PASS" start="2026-04-18T03:42:02.524447" elapsed="0.000308"/>
</if>
<for flavor="IN RANGE">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_As_Is" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:42:02.528616" level="INFO">${keyword} = Get_Ipv4_Topology_Count</msg>
<msg time="2026-04-18T03:42:02.528664" level="INFO">${args} = []</msg>
<msg time="2026-04-18T03:42:02.528713" level="INFO">${kwargs} = {'session': 'operational', 'topology': 'example-ipv4-topology'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:42:02.528104" elapsed="0.000632"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Get_Ipv4_Topology_Count" owner="PrefixCounting">
<kw name="Get_Ipv4_Topology" owner="PrefixCounting">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:42:02.545250" level="INFO">GET Request : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01agv6blx930rdupfsp7wkuo902.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-18T03:42:02.545597" level="INFO">GET Response : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '293'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xmlns="urn:opendaylight:params:xml:ns:yang:odl-bgp-topology-types"/&gt;&lt;/topology-types&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-04-18T03:42:02.554324" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${PC_NW_TOPOLOGY}=${topology}?content=nonconfig</arg>
<arg>expected_status=anything</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-18T03:42:02.531688" elapsed="0.022719"/>
</kw>
<if>
<branch type="IF" condition="${response.status_code} != 200">
<kw name="Fail" owner="BuiltIn">
<arg>Get on ${topology} returned status code ${response.status_code} with message: ${response.text}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:02.558415" elapsed="0.000038"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:42:02.554710" elapsed="0.003840"/>
</branch>
<status status="PASS" start="2026-04-18T03:42:02.554622" elapsed="0.003996"/>
</if>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-18T03:42:02.558759" elapsed="0.000103"/>
</return>
<msg time="2026-04-18T03:42:02.562213" level="INFO">${topology} = &lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xml...</msg>
<var>${topology}</var>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>GET the example-ipv4-topology data, check status is 200, return the topology data.</doc>
<status status="PASS" start="2026-04-18T03:42:02.530686" elapsed="0.031654"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:42:02.564309" level="INFO">${prefix_count} = 0</msg>
<var>${prefix_count}</var>
<arg>len(re.findall('"prefix":"', '''${topology}'''))</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:42:02.562749" elapsed="0.001669"/>
</kw>
<return>
<value>${prefix_count}</value>
<status status="PASS" start="2026-04-18T03:42:02.564566" elapsed="0.000046"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Get topology. If not fail, return number of prefixes in the topology.</doc>
<status status="PASS" start="2026-04-18T03:42:02.529389" elapsed="0.035470"/>
</kw>
<msg time="2026-04-18T03:42:02.564947" level="INFO">${result} = 0</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:42:02.528906" elapsed="0.036066"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:42:02.565022" elapsed="0.000028"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure without affecting arguments.</doc>
<status status="PASS" start="2026-04-18T03:42:02.527513" elapsed="0.037632"/>
</kw>
<msg time="2026-04-18T03:42:02.565239" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:42:02.565283" level="INFO">${message} = 0</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:42:02.526782" elapsed="0.038525"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:42:02.565474" elapsed="0.023756"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:42:02.590215" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-04-18T03:42:02.590081" elapsed="0.000202"/>
</branch>
<status status="PASS" start="2026-04-18T03:42:02.590058" elapsed="0.000249"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:02.590475" elapsed="0.000022"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with 0.</doc>
<status status="PASS" start="2026-04-18T03:42:02.589674" elapsed="0.000902"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:42:02.590622" elapsed="0.000028"/>
</return>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:42:02.526188" elapsed="0.064558"/>
</kw>
<msg time="2026-04-18T03:42:02.590844" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:42:02.590891" level="INFO">${data} = 0</msg>
<var>${status}</var>
<var>${data}</var>
<arg>ScalarClosures.Run_Keyword_And_Collect_Garbage</arg>
<arg>ScalarClosures.Run_Closure_As_Is</arg>
<arg>${getter}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:42:02.525582" elapsed="0.065333"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Getter failed: ${data}</value>
<status status="NOT RUN" start="2026-04-18T03:42:02.591100" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:42:02.590991" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-18T03:42:02.590973" elapsed="0.000197"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="WaitUtils__Is_Deadline_Reachable" owner="WaitUtils">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-18T03:42:02.592643" level="INFO">${date_now} = 2026-04-18 03:42:02.593</msg>
<var>${date_now}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-18T03:42:02.592455" elapsed="0.000215"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-18T03:42:02.593195" level="INFO">${time_deadline} = 915.889</msg>
<var>${time_deadline}</var>
<arg>${date_deadline}</arg>
<arg>${date_now}</arg>
<arg>result_format=number</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-18T03:42:02.592822" elapsed="0.000399"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:42:02.593798" level="INFO">${time_minimal} = 0.0</msg>
<var>${time_minimal}</var>
<arg>int(${sleeps_left}) * ${period_in_seconds}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:42:02.593387" elapsed="0.000437"/>
</kw>
<if>
<branch type="IF" condition="${time_minimal} &gt;= ${time_deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Not possible to succeed within the deadline. ${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:02.594143" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:42:02.593895" elapsed="0.000303"/>
</branch>
<status status="PASS" start="2026-04-18T03:42:02.593876" elapsed="0.000345"/>
</if>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Compute time to be wasted in sleeps, compare to deadline. Fail with message when needed.</doc>
<status status="PASS" start="2026-04-18T03:42:02.591871" elapsed="0.002398"/>
</kw>
<msg time="2026-04-18T03:42:02.594367" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:42:02.594411" level="INFO">${message} = None</msg>
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:42:02.591329" elapsed="0.003105"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:42:02.594716" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:42:02.594607" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-04-18T03:42:02.594588" elapsed="0.000200"/>
</if>
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Closure_After_Replacing_First_Two_Arguments" owner="ScalarClosures">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:42:02.596902" level="INFO">${keyword} = WaitUtils.Excluding_Stability_Safe_Stateful_Validator_As_Keyword</msg>
<msg time="2026-04-18T03:42:02.596951" level="INFO">${args} = ['250000', 0]</msg>
<msg time="2026-04-18T03:42:02.596996" level="INFO">${kwargs} = {'excluded_value': '250000'}</msg>
<var>${keyword}</var>
<var>${args}</var>
<var>${kwargs}</var>
<arg>${closure}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:42:02.596560" elapsed="0.000459"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>0</arg>
<arg>${arg1}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:42:02.597182" elapsed="0.000205"/>
</kw>
<kw name="Set List Value" owner="Collections">
<arg>${args}</arg>
<arg>1</arg>
<arg>${arg2}</arg>
<doc>Sets the value of ``list`` specified by ``index`` to the given ``value``.</doc>
<status status="PASS" start="2026-04-18T03:42:02.597562" elapsed="0.000192"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Excluding_Stability_Safe_Stateful_Validator_As_Keyword" owner="WaitUtils">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:42:02.599484" level="INFO">${new_state} = 0</msg>
<var>${new_state}</var>
<arg>${data}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:42:02.599083" elapsed="0.000428"/>
</kw>
<if>
<branch type="IF" condition="${data} == ${excluded_value}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Got the excluded value.</value>
<status status="NOT RUN" start="2026-04-18T03:42:02.599784" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:42:02.599601" elapsed="0.000235"/>
</branch>
<status status="PASS" start="2026-04-18T03:42:02.599582" elapsed="0.000276"/>
</if>
<if>
<branch type="IF" condition="${data} != ${old_state}">
<return>
<value>${new_state}</value>
<value>FAIL</value>
<value>Data value has changed.</value>
<status status="NOT RUN" start="2026-04-18T03:42:02.600074" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:42:02.599911" elapsed="0.000212"/>
</branch>
<status status="PASS" start="2026-04-18T03:42:02.599895" elapsed="0.000250"/>
</if>
<return>
<value>${new_state}</value>
<value>PASS</value>
<value>Validated stable: ${data}</value>
<status status="PASS" start="2026-04-18T03:42:02.600177" elapsed="0.000026"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Report failure if got the excluded value or if data value changed from last time. Useful to become validator.</doc>
<status status="PASS" start="2026-04-18T03:42:02.598636" elapsed="0.001705"/>
</kw>
<msg time="2026-04-18T03:42:02.600427" level="INFO">${result} = [0, 'PASS', 'Validated stable: 0']</msg>
<var>${result}</var>
<arg>${keyword}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-04-18T03:42:02.597920" elapsed="0.002532"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:42:02.600501" elapsed="0.000042"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Run the keyword from closure with replaced first two positional arguments.</doc>
<status status="PASS" start="2026-04-18T03:42:02.596146" elapsed="0.004491"/>
</kw>
<msg time="2026-04-18T03:42:02.600730" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:42:02.600775" level="INFO">${message} = [0, 'PASS', 'Validated stable: 0']</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:42:02.595477" elapsed="0.005322"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:42:02.600964" elapsed="0.022100"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:42:02.624090" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-04-18T03:42:02.623957" elapsed="0.000202"/>
</branch>
<status status="PASS" start="2026-04-18T03:42:02.623934" elapsed="0.000251"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:02.624349" elapsed="0.000023"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with [0, 'PASS', 'Validated stable: 0'].</doc>
<status status="PASS" start="2026-04-18T03:42:02.623492" elapsed="0.000939"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:42:02.624476" elapsed="0.000026"/>
</return>
<msg time="2026-04-18T03:42:02.624669" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:42:02.624715" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:42:02.624755" level="INFO">${result} = Validated stable: 0</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>ScalarClosures.Run_Closure_After_Replacing_First_Two_Arguments</arg>
<arg>${safe_validator}</arg>
<arg>${state}</arg>
<arg>${data}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:42:02.595011" elapsed="0.029766"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>Validator failed: ${result}</value>
<status status="NOT RUN" start="2026-04-18T03:42:02.624965" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:42:02.624859" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-18T03:42:02.624842" elapsed="0.000194"/>
</if>
<if>
<branch type="IF" condition="${sleeps_left} &lt;= 0">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:42:02.625189" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-04-18T03:42:02.625087" elapsed="0.000164"/>
</branch>
<status status="PASS" start="2026-04-18T03:42:02.625072" elapsed="0.000203"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${message}</var>
<arg>WaitUtils__Is_Deadline_Reachable</arg>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>sleeps_left=${sleeps_left}</arg>
<arg>message=Last result: ${result}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:02.625436" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' != '''PASS'''">
<return>
<value>${state}</value>
<value>${status}</value>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:42:02.625588" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:42:02.625552" elapsed="0.000155"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:42:02.625520" elapsed="0.000213"/>
</if>
<kw name="Sleep" owner="BuiltIn">
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:02.625877" elapsed="0.000021"/>
</kw>
<var name="${sleeps_left}">0</var>
<status status="PASS" start="2026-04-18T03:42:02.525349" elapsed="0.100585"/>
</iter>
<var>${sleeps_left}</var>
<value>${count}-1</value>
<value>-1</value>
<value>-1</value>
<status status="PASS" start="2026-04-18T03:42:02.524809" elapsed="0.101160"/>
</for>
<kw name="Fail" owner="BuiltIn">
<arg>Logic error, we should have returned before.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:02.626123" elapsed="0.000021"/>
</kw>
<msg time="2026-04-18T03:42:02.626340" level="INFO">${state} = 0</msg>
<msg time="2026-04-18T03:42:02.626386" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:42:02.626427" level="INFO">${result} = Validated stable: 0</msg>
<var>${state}</var>
<var>${status}</var>
<var>${result}</var>
<arg>date_deadline=${date_deadline}</arg>
<arg>period_in_seconds=${period_in_seconds}</arg>
<arg>count=${count}</arg>
<arg>getter=${getter}</arg>
<arg>safe_validator=${safe_validator}</arg>
<arg>initial_state=${state}</arg>
<doc>Pass only if consecutively 1 times in a row with 60 between attempts: ${getter} creates data and ${safe_validator} passes. Validator updates its state even if it reports failure. Always return validator state, status and message.</doc>
<status status="PASS" start="2026-04-18T03:42:02.515761" elapsed="0.110690"/>
</kw>
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:42:02.626662" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-18T03:42:02.626554" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-04-18T03:42:02.626521" elapsed="0.000224"/>
</if>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<arg>${result}</arg>
<arg>Not possible to succeed within the deadline.</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:02.627021" elapsed="0.000025"/>
</kw>
<kw name="Propagate_Fail_If_Message_Starts_With_Prefix" owner="WaitUtils">
<arg>${result}</arg>
<arg>Getter failed</arg>
<doc>Helper keyword to distinguish escalable failures by their prefix. If it is escalable, Fail without changing the message; otherwise Return comment.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:02.627320" elapsed="0.000024"/>
</kw>
<kw name="Sleep" owner="BuiltIn">
<arg>${period_in_seconds} s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:02.627497" elapsed="0.000021"/>
</kw>
<var name="${try}">2</var>
<status status="PASS" start="2026-04-18T03:42:02.514288" elapsed="0.113279"/>
</iter>
<var>${try}</var>
<value>1</value>
<value>${maximum_sleeps}+2</value>
<status status="PASS" start="2026-04-18T03:40:58.484977" elapsed="64.142624"/>
</for>
<kw name="Fail" owner="BuiltIn">
<arg>Logic error, we should have returned before.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:02.627763" elapsed="0.000021"/>
</kw>
<msg time="2026-04-18T03:42:02.627912" level="INFO">${result} = Validated stable: 0</msg>
<var>${result}</var>
<arg>timeout=${timeout}</arg>
<arg>period=${period}</arg>
<arg>count=${repetitions}</arg>
<arg>getter=${getter}</arg>
<arg>safe_validator=${validator}</arg>
<arg>initial_state=${excluded_count}</arg>
<doc>Analogue of Wait Until Keyword Succeeds, but it passes state of validator around and exits early on getter failure. Calls GASSVHTSCBD to verify data is "stable".</doc>
<status status="PASS" start="2026-04-18T03:40:58.477822" elapsed="64.150116"/>
</kw>
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-18T03:42:02.627997" elapsed="0.000027"/>
</return>
<arg>timeout=${bgp_filling_timeout}</arg>
<arg>period=${CHECK_PERIOD_PREFIX_COUNT_SINGLE}</arg>
<arg>repetitions=${REPETITIONS_PREFIX_COUNT_SINGLE}</arg>
<arg>excluded_count=${COUNT_PREFIX_COUNT_SINGLE}</arg>
<doc>Each ${period} get prefix count. When called with shard list, the check is done before the count is get. After 1 of stable different from ${excluded_count} within ${timeout}, Return validator output. Fail early on getter error.</doc>
<status status="PASS" start="2026-04-18T03:40:58.469082" elapsed="64.159035"/>
</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">
<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-04-18T03:42:02.628734" elapsed="0.000277"/>
</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-04-18T03:42:02.629855" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:42:02.629453" elapsed="0.000464"/>
</branch>
<status status="PASS" start="2026-04-18T03:42:02.629434" elapsed="0.000508"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>'${SetupUtils__Known_Bug_ID}' != ''</arg>
<arg>Set_Known_Bug_Id</arg>
<arg>${EMPTY}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:42:02.630093" elapsed="0.000316"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:42:02.635746" level="INFO">${test_skipped} = False</msg>
<var>${test_skipped}</var>
<arg>len(re.findall('SKIPPED', """${TEST_MESSAGE}""")) &gt; 0</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:42:02.635300" elapsed="0.000475"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-04-18T03:42:02.635996" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-18T03:42:02.635852" elapsed="0.000201"/>
</branch>
<status status="PASS" start="2026-04-18T03:42:02.635833" 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-04-18T03:42:02.636228" elapsed="0.000021"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<var>${reference}</var>
<arg>${SUITE_NAME}_${TEST_NAME}</arg>
<arg>[ /\.-]</arg>
<arg>_</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:02.636400" elapsed="0.000020"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:02.636589" elapsed="0.000022"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${msg}</var>
<arg>... click for list of related bugs or create a new one if needed (with the${newline}"${reference}"${newline}reference somewhere inside)</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:02.636761" elapsed="0.000021"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${bugs}</var>
<arg>"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=${reference}&amp;order=bug_status"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:02.636982" elapsed="0.000021"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:02.637151" elapsed="0.000020"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:02.637316" elapsed="0.000020"/>
</kw>
<doc>Report that a test failed and point to linked Bugzilla bug(s).
Linked bugs must contain the ${reference} inside comments (workaround
becasue of currently missing suitable field for external references and
not correctly working the CONTENT MATCHES filter).
Not FAILED (incl. SKIPPED) test are not reported.
This keyword must be used in the [Teardown] setting of the affected test
or as the first line of the test if FastFail module is not being
used. It reports the URL of the bug on console and also puts it
into the Robot log file.</doc>
<status status="PASS" start="2026-04-18T03:42:02.634988" elapsed="0.002404"/>
</kw>
<status status="PASS" start="2026-04-18T03:42:02.629239" elapsed="0.008204"/>
</kw>
<doc>Test case teardown. Show linked bugs and start fast failing in case of failure.</doc>
<status status="PASS" start="2026-04-18T03:42:02.628404" elapsed="0.009097"/>
</kw>
<doc>Wait until example-ipv4-topology becomes stable again.</doc>
<tag>critical</tag>
<status status="PASS" start="2026-04-18T03:40:58.324501" elapsed="64.313052"/>
</test>
<test id="s1-s2-t17" name="Check_For_Empty_Ipv4_Topology_After_Listening" line="217">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-18T03:42:02.640948" elapsed="0.000213"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-18T03:42:02.640681" 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-04-18T03:42:02.642219" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:42:02.642109" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-18T03:42:02.642090" 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-04-18T03:42:02.647085" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:42:02.646980" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-18T03:42:02.646962" elapsed="0.000192"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-18T03:42:02.648172" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-18T03:42:02.647787" elapsed="0.000413"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-18T03:42:02.648676" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-18T03:42:02.648362" elapsed="0.000342"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-18T03:42:02.648749" elapsed="0.000030"/>
</return>
<msg time="2026-04-18T03:42:02.648904" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-18T03:42:02.647382" elapsed="0.001546"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:42:02.654452" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:42:02.654343" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-18T03:42:02.654324" elapsed="0.000197"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:42:02.655754" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:42:02.655645" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-18T03:42:02.655626" elapsed="0.000195"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-18T03:42:02.656271" level="INFO">${karaf_connection_index} = 4</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-18T03:42:02.655967" elapsed="0.000331"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-18T03:42:02.656734" level="INFO">${current_connection_index} = 7</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:42:02.656459" elapsed="0.000304"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-18T03:42:02.697852" 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 "b "g "p "c "e "p "- "b "g "p "- "i "n "g "e "s "t "[78C- "[A[78Cm</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-18T03:42:02.657267" elapsed="0.040696"/>
</kw>
<msg time="2026-04-18T03:42:02.698162" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-18T03:42:02.698210" 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 "b "g "p "c "e "p "- "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:42:02.656928" elapsed="0.041319"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-18T03:42:02.733265" level="INFO">"i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "C "h "e "c "k "_ "F "o "r "_ "E "m "p "t "y "_ "I "p "v "4 "_ "T "o "p "o "l "o "g "y "_ "A "f "t "e "r "_ "L "i "s "t "e "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-04-18T03:42:02.698906" elapsed="0.034545"/>
</kw>
<msg time="2026-04-18T03:42:02.733643" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-18T03:42:02.733689" level="INFO">${message_wait} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "C "h "e "c "k "_ "F "...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:42:02.698449" elapsed="0.035283"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:02.734078" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:42:02.733821" elapsed="0.000318"/>
</branch>
<status status="PASS" start="2026-04-18T03:42:02.733796" elapsed="0.000370"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:42:02.734676" level="INFO"> "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "C "h "e "c "k "_ "F "o "r "_ "E "m "p "t "y "_ "I "p "v "4 "_ "T "o "p "o "l "o "g "y "_ "A "f "t "e "r "_ "L "i "s "t "e "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-04-18T03:42:02.734322" elapsed="0.000440"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:02.735071" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:42:02.734836" elapsed="0.000295"/>
</branch>
<status status="PASS" start="2026-04-18T03:42:02.734816" elapsed="0.000339"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-18T03:42:02.735192" elapsed="0.000035"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:42:02.737936" elapsed="0.000146"/>
</kw>
<msg time="2026-04-18T03:42:02.738145" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:42:02.736825" elapsed="0.001459"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:02.738610" elapsed="0.000082"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:02.738968" elapsed="0.000079"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-18T03:42:02.736131" elapsed="0.003031"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-18T03:42:02.735565" elapsed="0.003663"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-18T03:42:02.655299" elapsed="0.084027"/>
</kw>
<msg time="2026-04-18T03:42:02.739423" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:42:02.739494" level="INFO">${message} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "C "h "e "c "k "_ "F "...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:42:02.654693" elapsed="0.085020"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:42:02.739998" elapsed="0.000041"/>
</return>
<status status="PASS" start="2026-04-18T03:42:02.739839" elapsed="0.000247"/>
</branch>
<status status="PASS" start="2026-04-18T03:42:02.739809" elapsed="0.000336"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:02.740616" elapsed="0.000028"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:02.741016" elapsed="0.000028"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:42:02.741094" elapsed="0.000016"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-18T03:42:02.654001" elapsed="0.087210"/>
</kw>
<msg time="2026-04-18T03:42:02.741314" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:42:02.741359" level="INFO">${output} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "C "h "e "c "k "_ "F "...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:42:02.649301" elapsed="0.092095"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:02.741759" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:42:02.741476" elapsed="0.000338"/>
</branch>
<status status="PASS" start="2026-04-18T03:42:02.741457" elapsed="0.000380"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-18T03:42:02.649157" elapsed="0.092704"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-18T03:42:02.648982" elapsed="0.092913"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-18T03:42:02.646626" elapsed="0.095325"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-18T03:42:02.641819" elapsed="0.100253"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:42:02.641370" elapsed="0.100750"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-18T03:42:02.638507" elapsed="0.103668"/>
</kw>
<kw name="Check_Ipv4_Topology_Is_Empty" owner="PrefixCounting">
<kw name="Check_Ipv4_Topology_Count" owner="PrefixCounting">
<kw name="Run_Keyword_And_Collect_Garbage" owner="ScalarClosures">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get_Ipv4_Topology_Count" owner="PrefixCounting">
<kw name="Get_Ipv4_Topology" owner="PrefixCounting">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-18T03:42:02.751970" level="INFO">GET Request : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01agv6blx930rdupfsp7wkuo902.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-18T03:42:02.752113" level="INFO">GET Response : url=http://10.30.170.68:8181/rests/data/network-topology:network-topology/topology=example-ipv4-topology?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+xml', 'Content-Length': '293'} 
 body=&lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xmlns="urn:opendaylight:params:xml:ns:yang:odl-bgp-topology-types"/&gt;&lt;/topology-types&gt;&lt;/topology&gt; 
 </msg>
<msg time="2026-04-18T03:42:02.752230" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${PC_NW_TOPOLOGY}=${topology}?content=nonconfig</arg>
<arg>expected_status=anything</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-18T03:42:02.745774" elapsed="0.006482"/>
</kw>
<if>
<branch type="IF" condition="${response.status_code} != 200">
<kw name="Fail" owner="BuiltIn">
<arg>Get on ${topology} returned status code ${response.status_code} with message: ${response.text}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:02.754674" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:42:02.752338" elapsed="0.002395"/>
</branch>
<status status="PASS" start="2026-04-18T03:42:02.752317" elapsed="0.002440"/>
</if>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-18T03:42:02.754792" elapsed="0.000031"/>
</return>
<msg time="2026-04-18T03:42:02.757055" level="INFO">${topology} = &lt;topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology-id&gt;example-ipv4-topology&lt;/topology-id&gt;&lt;server-provided&gt;true&lt;/server-provided&gt;&lt;topology-types&gt;&lt;bgp-ipv4-reachability-topology xml...</msg>
<var>${topology}</var>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>GET the example-ipv4-topology data, check status is 200, return the topology data.</doc>
<status status="PASS" start="2026-04-18T03:42:02.745327" elapsed="0.011761"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:42:02.757704" level="INFO">${prefix_count} = 0</msg>
<var>${prefix_count}</var>
<arg>len(re.findall('"prefix":"', '''${topology}'''))</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:42:02.757258" elapsed="0.000473"/>
</kw>
<return>
<value>${prefix_count}</value>
<status status="PASS" start="2026-04-18T03:42:02.757780" elapsed="0.000030"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Get topology. If not fail, return number of prefixes in the topology.</doc>
<status status="PASS" start="2026-04-18T03:42:02.744801" elapsed="0.013105"/>
</kw>
<msg time="2026-04-18T03:42:02.758000" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:42:02.758043" level="INFO">${message} = 0</msg>
<var>${status}</var>
<var>${message}</var>
<arg>${keyword_to_gc}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:42:02.744260" elapsed="0.013806"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<arg>gc.collect()</arg>
<arg>modules=gc</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:42:02.758231" elapsed="0.026587"/>
</kw>
<kw name="Propagate_Fail" owner="ScalarClosures">
<if>
<branch type="IF" condition="'''${status}''' == '''PASS'''">
<return>
<status status="PASS" start="2026-04-18T03:42:02.785811" elapsed="0.000036"/>
</return>
<status status="PASS" start="2026-04-18T03:42:02.785681" elapsed="0.000201"/>
</branch>
<status status="PASS" start="2026-04-18T03:42:02.785657" elapsed="0.000250"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${message}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:02.786072" elapsed="0.000022"/>
</kw>
<arg>status=${status}</arg>
<arg>message=${message}</arg>
<doc>If PASS is PASS do nothing. Otherwise Fail with 0.</doc>
<status status="PASS" start="2026-04-18T03:42:02.785255" elapsed="0.000898"/>
</kw>
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:42:02.786196" elapsed="0.000026"/>
</return>
<msg time="2026-04-18T03:42:02.786349" level="INFO">${actual_count} = 0</msg>
<var>${actual_count}</var>
<arg>Get_Ipv4_Topology_Count</arg>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>Runs Keyword, but performs garbage collection before pass/fail.</doc>
<status status="PASS" start="2026-04-18T03:42:02.743375" elapsed="0.043001"/>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<msg time="2026-04-18T03:42:02.786880" level="INFO">Argument types are:
&lt;class 'int'&gt;
&lt;class 'str'&gt;</msg>
<arg>${actual_count}</arg>
<arg>${expected_count}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="PASS" start="2026-04-18T03:42:02.786550" elapsed="0.000387"/>
</kw>
<arg>0</arg>
<arg>session=${session}</arg>
<arg>topology=${topology}</arg>
<doc>Check that the count of prefixes matches the expected count. Fails if it does not. In either case, collect garbage.</doc>
<status status="PASS" start="2026-04-18T03:42:02.742807" elapsed="0.044189"/>
</kw>
<doc>Example_Ipv4_Topology has to give status 200 with zero prefixes.</doc>
<status status="PASS" start="2026-04-18T03:42:02.742394" elapsed="0.044657"/>
</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">
<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-04-18T03:42:02.787669" elapsed="0.000249"/>
</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-04-18T03:42:02.788838" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:42:02.788356" elapsed="0.000546"/>
</branch>
<status status="PASS" start="2026-04-18T03:42:02.788338" elapsed="0.000589"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>'${SetupUtils__Known_Bug_ID}' != ''</arg>
<arg>Set_Known_Bug_Id</arg>
<arg>${EMPTY}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:42:02.789078" elapsed="0.000317"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:42:02.794334" level="INFO">${test_skipped} = False</msg>
<var>${test_skipped}</var>
<arg>len(re.findall('SKIPPED', """${TEST_MESSAGE}""")) &gt; 0</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:42:02.793924" elapsed="0.000438"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-04-18T03:42:02.794598" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-18T03:42:02.794436" elapsed="0.000221"/>
</branch>
<status status="PASS" start="2026-04-18T03:42:02.794417" 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-04-18T03:42:02.794832" elapsed="0.000021"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<var>${reference}</var>
<arg>${SUITE_NAME}_${TEST_NAME}</arg>
<arg>[ /\.-]</arg>
<arg>_</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:02.795004" elapsed="0.000020"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:02.795178" elapsed="0.000020"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${msg}</var>
<arg>... click for list of related bugs or create a new one if needed (with the${newline}"${reference}"${newline}reference somewhere inside)</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:02.795388" elapsed="0.000021"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${bugs}</var>
<arg>"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=${reference}&amp;order=bug_status"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:02.795574" elapsed="0.000021"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:02.795744" elapsed="0.000020"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:02.795909" elapsed="0.000020"/>
</kw>
<doc>Report that a test failed and point to linked Bugzilla bug(s).
Linked bugs must contain the ${reference} inside comments (workaround
becasue of currently missing suitable field for external references and
not correctly working the CONTENT MATCHES filter).
Not FAILED (incl. SKIPPED) test are not reported.
This keyword must be used in the [Teardown] setting of the affected test
or as the first line of the test if FastFail module is not being
used. It reports the URL of the bug on console and also puts it
into the Robot log file.</doc>
<status status="PASS" start="2026-04-18T03:42:02.793617" elapsed="0.002367"/>
</kw>
<status status="PASS" start="2026-04-18T03:42:02.788145" elapsed="0.007889"/>
</kw>
<doc>Test case teardown. Show linked bugs and start fast failing in case of failure.</doc>
<status status="PASS" start="2026-04-18T03:42:02.787321" elapsed="0.008754"/>
</kw>
<doc>Example-ipv4-topology should be empty now.</doc>
<tag>critical</tag>
<status status="PASS" start="2026-04-18T03:42:02.637951" elapsed="0.158162"/>
</test>
<test id="s1-s2-t18" name="Delete_Bgp_Peer_Configuration" line="223">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-18T03:42:02.799477" elapsed="0.000233"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-18T03:42:02.799170" elapsed="0.000596"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:42:02.800769" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:42:02.800658" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-18T03:42:02.800639" 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-04-18T03:42:02.805630" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:42:02.805503" elapsed="0.000173"/>
</branch>
<status status="PASS" start="2026-04-18T03:42:02.805485" elapsed="0.000214"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-18T03:42:02.806852" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-18T03:42:02.806447" elapsed="0.000432"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-18T03:42:02.807425" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-18T03:42:02.807086" elapsed="0.000365"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-18T03:42:02.807494" elapsed="0.000030"/>
</return>
<msg time="2026-04-18T03:42:02.807666" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-18T03:42:02.806070" elapsed="0.001620"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:42:02.813105" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:42:02.812996" elapsed="0.000201"/>
</branch>
<status status="PASS" start="2026-04-18T03:42:02.812977" elapsed="0.000247"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-18T03:42:02.814426" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-18T03:42:02.814318" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-18T03:42:02.814299" elapsed="0.000197"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-18T03:42:02.814990" level="INFO">${karaf_connection_index} = 4</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-18T03:42:02.814679" elapsed="0.000339"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-18T03:42:02.815434" level="INFO">${current_connection_index} = 7</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:42:02.815182" elapsed="0.000279"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-18T03:42:02.846970" 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 "b "g "p "c "e "p "- "b "g "p "- "i "n "g "e "s "t "[78C- "[A[78Cm</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-18T03:42:02.815983" elapsed="0.031100"/>
</kw>
<msg time="2026-04-18T03:42:02.847301" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-18T03:42:02.847349" 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 "b "g "p "c "e "p "- "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:42:02.815641" elapsed="0.031745"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-18T03:42:02.877195" level="INFO">"i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "D "e "l "e "t "e "_ "B "g "p "_ "P "e "e "r "_ "C "o "n "f "i "g "u "r "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-04-18T03:42:02.848126" elapsed="0.029185"/>
</kw>
<msg time="2026-04-18T03:42:02.877477" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-18T03:42:02.877523" level="INFO">${message_wait} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "D "e "l "e "t "e "_ "...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:42:02.847616" elapsed="0.029965"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:02.877955" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:42:02.877697" elapsed="0.000316"/>
</branch>
<status status="PASS" start="2026-04-18T03:42:02.877668" elapsed="0.000370"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:42:02.878489" level="INFO"> "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "D "e "l "e "t "e "_ "B "g "p "_ "P "e "e "r "_ "C "o "n "f "i "g "u "r "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-04-18T03:42:02.878183" elapsed="0.000413"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:02.878886" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:42:02.878666" elapsed="0.000274"/>
</branch>
<status status="PASS" start="2026-04-18T03:42:02.878647" elapsed="0.000316"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-18T03:42:02.878996" elapsed="0.000031"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:42:02.881617" elapsed="0.000157"/>
</kw>
<msg time="2026-04-18T03:42:02.881840" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:42:02.880543" elapsed="0.001434"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:02.882263" elapsed="0.000080"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:02.882710" elapsed="0.000082"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-18T03:42:02.879868" elapsed="0.003040"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-18T03:42:02.879310" elapsed="0.003662"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-18T03:42:02.814015" elapsed="0.069056"/>
</kw>
<msg time="2026-04-18T03:42:02.883209" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:42:02.883258" level="INFO">${message} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "D "e "l "e "t "e "_ "...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:42:02.813382" elapsed="0.069915"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-18T03:42:02.883484" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-18T03:42:02.883375" elapsed="0.000235"/>
</branch>
<status status="PASS" start="2026-04-18T03:42:02.883356" elapsed="0.000282"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:02.884050" elapsed="0.000025"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:02.884393" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-18T03:42:02.884464" elapsed="0.000015"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-18T03:42:02.812657" elapsed="0.071932"/>
</kw>
<msg time="2026-04-18T03:42:02.884683" level="INFO">${status} = PASS</msg>
<msg time="2026-04-18T03:42:02.884726" level="INFO">${output} =  "i "x "e "d ". "t "x "t ". "S "i "n "g "l "e "p "e "e "r "[C "P "r "e "f "i "x "c "o "u "n "t ". "D "e "l "e "t "e "_ "...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:42:02.808063" elapsed="0.076701"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:02.885091" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:42:02.884839" elapsed="0.000305"/>
</branch>
<status status="PASS" start="2026-04-18T03:42:02.884821" elapsed="0.000347"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-18T03:42:02.807919" elapsed="0.077273"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-18T03:42:02.807744" elapsed="0.077480"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-18T03:42:02.805148" elapsed="0.080130"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-18T03:42:02.800352" elapsed="0.084981"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:42:02.799922" elapsed="0.085457"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-18T03:42:02.796874" elapsed="0.088559"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-18T03:42:02.886198" level="INFO">&amp;{mapping} = { DEVICE_NAME=controller-config | BGP_NAME=example-bgp-peer | IP=10.30.170.251 | BGP_RIB_OPENCONFIG=example-bgp-rib }</msg>
<var>&amp;{mapping}</var>
<arg>DEVICE_NAME=${DEVICE_NAME}</arg>
<arg>BGP_NAME=${BGP_PEER_NAME}</arg>
<arg>IP=${TOOLS_SYSTEM_IP}</arg>
<arg>BGP_RIB_OPENCONFIG=${PROTOCOL_OPENCONFIG}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-18T03:42:02.885625" elapsed="0.000602"/>
</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-04-18T03:42:02.929253" level="INFO">${file_path_stream} = /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:42:02.928848" elapsed="0.000442"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-18T03:42:02.930083" level="FAIL">File '/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/variables/bgpuser/bgp_peer.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-18T03:42:02.929830" elapsed="0.000328">File '/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/variables/bgpuser/bgp_peer.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-18T03:42:02.930253" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-18T03:42:02.929469" elapsed="0.000809"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-18T03:42:02.930855" level="INFO">${file_path} = /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-18T03:42:02.930447" elapsed="0.000434"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-18T03:42:02.931237" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/variables/bgpuser/bgp_peer/location.uri"&gt;/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/variables/bgpuser/bgp_peer/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-18T03:42:02.931401" level="INFO">${template} = rests/data/openconfig-network-instance:network-instances/network-instance=global-bgp/openconfig-network-instance:protocols/protocol=openconfig-policy-types%3ABGP,$BGP_RIB_OPENCONFIG/bgp-openconfig-ext...</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-18T03:42:02.931082" elapsed="0.000347"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:42:02.931867" level="INFO">rests/data/openconfig-network-instance:network-instances/network-instance=global-bgp/openconfig-network-instance:protocols/protocol=openconfig-policy-types%3ABGP,$BGP_RIB_OPENCONFIG/bgp-openconfig-extensions:bgp/neighbors/neighbor=$IP
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:42:02.931614" elapsed="0.000301"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:42:02.932984" level="INFO">mapping: {'DEVICE_NAME': 'controller-config', 'BGP_NAME': 'example-bgp-peer', 'IP': '10.30.170.251', 'BGP_RIB_OPENCONFIG': 'example-bgp-rib'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:42:02.932724" elapsed="0.000308"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-18T03:42:02.933464" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-18T03:42:02.933195" elapsed="0.000295"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-18T03:42:02.934180" level="INFO">${value} = controller-config</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-18T03:42:02.933877" elapsed="0.000330"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-18T03:42:02.934971" level="INFO">${encoded} = controller-config</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-18T03:42:02.934748" elapsed="0.000250"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-18T03:42:02.935083" elapsed="0.000034"/>
</return>
<msg time="2026-04-18T03:42:02.935244" level="INFO">${encoded_value} = controller-config</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-04-18T03:42:02.934399" elapsed="0.000870"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-18T03:42:02.935428" elapsed="0.000255"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">controller-config</var>
<status status="PASS" start="2026-04-18T03:42:02.933736" elapsed="0.001989"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-18T03:42:02.936276" level="INFO">${value} = example-bgp-peer</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-18T03:42:02.935976" elapsed="0.000326"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-18T03:42:02.937055" level="INFO">${encoded} = example-bgp-peer</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-18T03:42:02.936832" elapsed="0.000250"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-18T03:42:02.937133" elapsed="0.000030"/>
</return>
<msg time="2026-04-18T03:42:02.937285" level="INFO">${encoded_value} = example-bgp-peer</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-04-18T03:42:02.936495" 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-04-18T03:42:02.937464" elapsed="0.000241"/>
</kw>
<var name="${key}">BGP_NAME</var>
<var name="${value}">example-bgp-peer</var>
<status status="PASS" start="2026-04-18T03:42:02.935839" elapsed="0.001910"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-18T03:42:02.938304" level="INFO">${value} = 10.30.170.251</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-18T03:42:02.938001" elapsed="0.000329"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-18T03:42:02.939091" level="INFO">${encoded} = 10.30.170.251</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-18T03:42:02.938861" elapsed="0.000256"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-18T03:42:02.939168" elapsed="0.000029"/>
</return>
<msg time="2026-04-18T03:42:02.939319" level="INFO">${encoded_value} = 10.30.170.251</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-04-18T03:42:02.938522" 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-04-18T03:42:02.939498" elapsed="0.000412"/>
</kw>
<var name="${key}">IP</var>
<var name="${value}">10.30.170.251</var>
<status status="PASS" start="2026-04-18T03:42:02.937863" elapsed="0.002089"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-18T03:42:02.940508" level="INFO">${value} = example-bgp-rib</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-18T03:42:02.940204" elapsed="0.000344"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-18T03:42:02.941276" level="INFO">${encoded} = example-bgp-rib</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-18T03:42:02.941063" elapsed="0.000240"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-04-18T03:42:02.941352" elapsed="0.000029"/>
</return>
<msg time="2026-04-18T03:42:02.941504" level="INFO">${encoded_value} = example-bgp-rib</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-04-18T03:42:02.940741" 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-04-18T03:42:02.941701" elapsed="0.000225"/>
</kw>
<var name="${key}">BGP_RIB_OPENCONFIG</var>
<var name="${value}">example-bgp-rib</var>
<status status="PASS" start="2026-04-18T03:42:02.940067" elapsed="0.001899"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-04-18T03:42:02.933556" elapsed="0.008446"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-18T03:42:02.942045" elapsed="0.000027"/>
</return>
<msg time="2026-04-18T03:42:02.942205" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'controller-config', 'BGP_NAME': 'example-bgp-peer', 'IP': '10.30.170.251', 'BGP_RIB_OPENCONFIG': 'example-bgp-rib'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-18T03:42:02.932382" elapsed="0.009849"/>
</kw>
<status status="PASS" start="2026-04-18T03:42:02.932049" elapsed="0.010214"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:02.942482" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:42:02.942323" elapsed="0.000230"/>
</branch>
<status status="PASS" start="2026-04-18T03:42:02.931967" elapsed="0.010608"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:42:02.943394" level="INFO">${final_text} = rests/data/openconfig-network-instance:network-instances/network-instance=global-bgp/openconfig-network-instance:protocols/protocol=openconfig-policy-types%3ABGP,example-bgp-rib/bgp-openconfig-extensi...</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:42:02.942724" elapsed="0.000699"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-18T03:42:02.943471" 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/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer/${file_name}.</doc>
<status status="PASS" start="2026-04-18T03:42:02.928172" elapsed="0.015441"/>
</kw>
<msg time="2026-04-18T03:42:02.943669" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:42:02.915023" elapsed="0.028693"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:02.956419" 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/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:02.968936" 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/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/suites/bgpcep/bgpingest/../../../variables/bgpuser//bgp_peer/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:02.981225" elapsed="0.000028"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:02.981573" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:02.981762" elapsed="0.000020"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:02.982152" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:42:02.982001" elapsed="0.000207"/>
</branch>
<status status="NOT RUN" start="2026-04-18T03:42:02.981985" elapsed="0.000248"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:02.982375" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:02.982556" elapsed="0.000021"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:02.982725" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-18T03:42:02.981951" elapsed="0.000826"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-18T03:42:02.981839" 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-04-18T03:42:02.982974" elapsed="0.000025"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-18T03:42:02.983058" elapsed="0.000016"/>
</return>
<msg time="2026-04-18T03:42:02.983198" level="INFO">${uri} = rests/data/openconfig-network-instance:network-instances/network-instance=global-bgp/openconfig-network-instance:protocols/protocol=openconfig-policy-types%3ABGP,example-bgp-rib/bgp-openconfig-extensi...</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=${location}</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-04-18T03:42:02.910645" elapsed="0.072631"/>
</kw>
<kw name="Delete_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:42:02.984444" level="INFO">rests/data/openconfig-network-instance:network-instances/network-instance=global-bgp/openconfig-network-instance:protocols/protocol=openconfig-policy-types%3ABGP,example-bgp-rib/bgp-openconfig-extensions:bgp/neighbors/neighbor=10.30.170.251</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:42:02.984167" elapsed="0.000328"/>
</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-04-18T03:42:03.002217" level="INFO">DELETE Request : url=http://10.30.170.68:8181/rests/data/openconfig-network-instance:network-instances/network-instance=global-bgp/openconfig-network-instance:protocols/protocol=openconfig-policy-types%3ABGP,example-bgp-rib/bgp-openconfig-extensions:bgp/neighbors/neighbor=10.30.170.251 
 path_url=/rests/data/openconfig-network-instance:network-instances/network-instance=global-bgp/openconfig-network-instance:protocols/protocol=openconfig-policy-types%3ABGP,example-bgp-rib/bgp-openconfig-extensions:bgp/neighbors/neighbor=10.30.170.251 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01nuoo0mlt5ido1wctlq8u208h83.node0', 'Content-Length': '0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-18T03:42:03.002326" level="INFO">DELETE Response : url=http://10.30.170.68:8181/rests/data/openconfig-network-instance:network-instances/network-instance=global-bgp/openconfig-network-instance:protocols/protocol=openconfig-policy-types%3ABGP,example-bgp-rib/bgp-openconfig-extensions:bgp/neighbors/neighbor=10.30.170.251 
 status=204, reason=No Content 
 headers={} 
 body=None 
 </msg>
<msg time="2026-04-18T03:42:03.002599" level="INFO">${response} = &lt;Response [204]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-18T03:42:02.986637" elapsed="0.016024"/>
</kw>
<status status="PASS" start="2026-04-18T03:42:02.984578" elapsed="0.018174"/>
</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-04-18T03:42:03.003184" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:42:03.002811" elapsed="0.000511"/>
</branch>
<status status="PASS" start="2026-04-18T03:42:02.984559" elapsed="0.018810"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:42:03.011511" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:42:03.005740" elapsed="0.005861"/>
</kw>
<status status="PASS" start="2026-04-18T03:42:03.005211" elapsed="0.006427"/>
</branch>
<status status="PASS" start="2026-04-18T03:42:03.005171" elapsed="0.006491"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:42:03.014208" level="INFO">204</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:42:03.011941" elapsed="0.002314"/>
</kw>
<status status="PASS" start="2026-04-18T03:42:03.011718" elapsed="0.002571"/>
</branch>
<status status="PASS" start="2026-04-18T03:42:03.011701" elapsed="0.002612"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:42:03.014913" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:42:03.014487" elapsed="0.000454"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:03.015247" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:42:03.015011" elapsed="0.000293"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:42:03.015812" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:42:03.015489" elapsed="0.000349"/>
</kw>
<status status="PASS" start="2026-04-18T03:42:03.015327" elapsed="0.000547"/>
</branch>
<status status="PASS" start="2026-04-18T03:42:03.014992" elapsed="0.000903"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:42:03.016417" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:42:03.016054" elapsed="0.000390"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:03.016762" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:42:03.016513" elapsed="0.000305"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-18T03:42:03.017293" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-18T03:42:03.017000" elapsed="0.000319"/>
</kw>
<status status="PASS" start="2026-04-18T03:42:03.016842" elapsed="0.000512"/>
</branch>
<status status="PASS" start="2026-04-18T03:42:03.016495" elapsed="0.000880"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:42:03.017541" elapsed="0.000348"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-18T03:42:03.018362" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:42:03.018056" elapsed="0.000371"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-18T03:42:03.018618" elapsed="0.002312"/>
</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="PASS" start="2026-04-18T03:42:03.004272" elapsed="0.016722"/>
</kw>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-18T03:42:03.021041" elapsed="0.000035"/>
</return>
<msg time="2026-04-18T03:42:03.023390" level="INFO">${response_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="PASS" start="2026-04-18T03:42:02.983571" elapsed="0.039848"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-18T03:42:03.023476" elapsed="0.000030"/>
</return>
<arg>${BGP_VARIABLES_FOLDER}${/}bgp_peer</arg>
<arg>mapping=${mapping}</arg>
<doc>Resolve URI from folder, issue DELETE request.</doc>
<status status="PASS" start="2026-04-18T03:42:02.886460" elapsed="0.137166"/>
</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">
<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-04-18T03:42:03.024231" elapsed="0.000242"/>
</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-04-18T03:42:03.025325" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-18T03:42:03.024936" elapsed="0.000452"/>
</branch>
<status status="PASS" start="2026-04-18T03:42:03.024918" 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-04-18T03:42:03.025576" elapsed="0.000311"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-18T03:42:03.030948" level="INFO">${test_skipped} = False</msg>
<var>${test_skipped}</var>
<arg>len(re.findall('SKIPPED', """${TEST_MESSAGE}""")) &gt; 0</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-18T03:42:03.030493" elapsed="0.000482"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-04-18T03:42:03.031193" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-18T03:42:03.031050" elapsed="0.000199"/>
</branch>
<status status="PASS" start="2026-04-18T03:42:03.031031" elapsed="0.000242"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:03.031423" elapsed="0.000020"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<var>${reference}</var>
<arg>${SUITE_NAME}_${TEST_NAME}</arg>
<arg>[ /\.-]</arg>
<arg>_</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:03.031619" elapsed="0.000021"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:03.031795" elapsed="0.000020"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${msg}</var>
<arg>... click for list of related bugs or create a new one if needed (with the${newline}"${reference}"${newline}reference somewhere inside)</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:03.031962" elapsed="0.000020"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${bugs}</var>
<arg>"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=${reference}&amp;order=bug_status"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:03.032128" elapsed="0.000020"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:03.032294" elapsed="0.000020"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:03.032458" elapsed="0.000020"/>
</kw>
<doc>Report that a test failed and point to linked Bugzilla bug(s).
Linked bugs must contain the ${reference} inside comments (workaround
becasue of currently missing suitable field for external references and
not correctly working the CONTENT MATCHES filter).
Not FAILED (incl. SKIPPED) test are not reported.
This keyword must be used in the [Teardown] setting of the affected test
or as the first line of the test if FastFail module is not being
used. It reports the URL of the bug on console and also puts it
into the Robot log file.</doc>
<status status="PASS" start="2026-04-18T03:42:03.030189" elapsed="0.002357"/>
</kw>
<status status="PASS" start="2026-04-18T03:42:03.024722" elapsed="0.007878"/>
</kw>
<doc>Test case teardown. Show linked bugs and start fast failing in case of failure.</doc>
<status status="PASS" start="2026-04-18T03:42:03.023919" elapsed="0.008722"/>
</kw>
<doc>Revert the BGP configuration to the original state: without any configured peers.</doc>
<status status="PASS" start="2026-04-18T03:42:02.796326" elapsed="0.236353"/>
</test>
<kw name="Teardown_Everything" type="TEARDOWN">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Search_And_Kill_Remote_Python" owner="KillPythonTool">
<kw name="Search_For_Remote_Python_Processes" owner="KillPythonTool">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-18T03:42:03.034620" level="INFO">Executing command 'ps -elf | egrep python | egrep 'play.py' | egrep -v grep'.</msg>
<msg time="2026-04-18T03:42:03.057558" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-18T03:42:03.057663" level="INFO">${processes} = </msg>
<var>${processes}</var>
<arg>ps -elf | egrep python | egrep ${filter} | egrep -v grep</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-18T03:42:03.034456" elapsed="0.023232"/>
</kw>
<return>
<value>${processes}</value>
<status status="PASS" start="2026-04-18T03:42:03.057781" elapsed="0.000035"/>
</return>
<msg time="2026-04-18T03:42:03.057946" level="INFO">${processes} = </msg>
<var>${processes}</var>
<arg>${filter}</arg>
<doc>Only searches for the list of processes, in case something else than kill has to be done with them.</doc>
<status status="PASS" start="2026-04-18T03:42:03.034187" elapsed="0.023784"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:42:03.058392" level="INFO"/>
<arg>${processes}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:42:03.058133" elapsed="0.000301"/>
</kw>
<kw name="Kill_Remote_Processes" owner="KillPythonTool">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-18T03:42:03.059305" level="INFO">Length is 0.</msg>
<msg time="2026-04-18T03:42:03.059381" level="INFO">${arg_length} = 0</msg>
<var>${arg_length}</var>
<arg>${pself_lines}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-18T03:42:03.059033" elapsed="0.000372"/>
</kw>
<if>
<branch type="IF" condition="${arg_length} == 0">
<return>
<status status="PASS" start="2026-04-18T03:42:03.059676" elapsed="0.000058"/>
</return>
<status status="PASS" start="2026-04-18T03:42:03.059476" elapsed="0.000325"/>
</branch>
<status status="PASS" start="2026-04-18T03:42:03.059457" elapsed="0.000396"/>
</if>
<kw name="Execute Command" owner="SSHLibrary">
<var>${commands}</var>
<arg>echo '${pself_lines}' | awk '{print "kill -${signal}",$4}'</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:03.060194" elapsed="0.000047"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${commands}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:03.060608" elapsed="0.000049"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${stdout}</var>
<var>${stderr}</var>
<arg>echo 'set -exu; ${commands}' | sudo sh</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:03.060993" elapsed="0.000045"/>
</kw>
<arg>${processes}</arg>
<doc>Kill processes by PIDs from given list (no-op if the list is empty), using specified signal. Log the kill commands used.</doc>
<status status="PASS" start="2026-04-18T03:42:03.058702" elapsed="0.002477"/>
</kw>
<arg>'play\.py'</arg>
<doc>The main keyword. Search for processes, Log the list of them, kill them.</doc>
<status status="PASS" start="2026-04-18T03:42:03.033906" elapsed="0.027386"/>
</kw>
<arg>KillPythonTool.Search_And_Kill_Remote_Python</arg>
<arg>'play\.py'</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:42:03.033489" elapsed="0.027901"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get_Sysstat_Statistics" owner="Utils">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-18T03:42:03.063754" level="INFO">index=7
host=10.30.170.251
alias=None
port=22
timeout=10 seconds
newline=

prompt=&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-18T03:42:03.063984" level="INFO">${current_connection} = index=7
host=10.30.170.251
alias=None
port=22
timeout=10 seconds
newline=

prompt=&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-18T03:42:03.063421" elapsed="0.000623"/>
</kw>
<kw name="Open_Connection_To_ODL_System" owner="SSHKeywords">
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-18T03:42:03.066298" level="INFO">${odl_connection} = 8</msg>
<var>${odl_connection}</var>
<arg>${ip_address}</arg>
<arg>prompt=${ODL_SYSTEM_PROMPT}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-18T03:42:03.065409" elapsed="0.000948"/>
</kw>
<kw name="Flexible_Controller_Login" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-18T03:42:03.069142" level="INFO">Length is 0.</msg>
<msg time="2026-04-18T03:42:03.069250" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-18T03:42:03.068781" elapsed="0.000503"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:42:03.069506" elapsed="0.000462"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-18T03:42:03.071171" level="INFO">Logging into '10.30.170.68:22' as 'jenkins'.</msg>
<msg time="2026-04-18T03:42:03.728558" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Sat Apr 18 03:42:03 UTC 2026

  System load:  0.16               Processes:             121
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 22%                IPv4 address for ens3: 10.30.170.68
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Sat Apr 18 03:05:52 2026 from 10.30.171.5
[?2004h[jenkins@releng-35801-190-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-18T03:42:03.070716" elapsed="0.658055"/>
</kw>
<msg time="2026-04-18T03:42:03.728891" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:42:03.070202" elapsed="0.658822"/>
</kw>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-18T03:42:03.068156" elapsed="0.661024"/>
</kw>
<msg time="2026-04-18T03:42:03.729254" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Flexible SSH Login</arg>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:42:03.067612" elapsed="0.661728"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-18T03:42:03.066848" elapsed="0.662615"/>
</kw>
<return>
<value>${odl_connection}</value>
<status status="PASS" start="2026-04-18T03:42:03.729549" elapsed="0.000059"/>
</return>
<arg>${ip_address}</arg>
<doc>Open a connection to the ODL system at 10.30.170.68 and return its identifier.</doc>
<status status="PASS" start="2026-04-18T03:42:03.064640" elapsed="0.665146"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-18T03:42:03.731782" level="INFO">sar -A -f /var/log/sa/sa*</msg>
<arg>sar -A -f /var/log/sa/sa*</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-18T03:42:03.730166" elapsed="0.001698"/>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-18T03:42:03.734324" level="INFO">[?2004lCannot open /var/log/sa/sa*: No such file or directory
[?2004h[jenkins@releng-35801-190-0-builder-0 ~]&gt;</msg>
<msg time="2026-04-18T03:42:03.734461" level="INFO">${output} = [?2004lCannot open /var/log/sa/sa*: No such file or directory
[?2004h[jenkins@releng-35801-190-0-builder-0 ~]&gt;</msg>
<var>${output}</var>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="PASS" start="2026-04-18T03:42:03.732103" elapsed="0.002401"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-18T03:42:03.735186" level="INFO">[?2004lCannot open /var/log/sa/sa*: No such file or directory
[?2004h[jenkins@releng-35801-190-0-builder-0 ~]&gt;</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-18T03:42:03.734759" elapsed="0.000498"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-18T03:42:03.735481" elapsed="0.000266"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-18T03:42:03.735806" elapsed="0.000043"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-18T03:42:03.740676" elapsed="0.000218"/>
</kw>
<msg time="2026-04-18T03:42:03.740961" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-18T03:42:03.739866" elapsed="0.001182"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:03.741288" elapsed="0.000031"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-18T03:42:03.741566" elapsed="0.000033"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-18T03:42:03.736297" elapsed="0.005399"/>
</kw>
<doc>Store current connection index, open new connection to ip_address. Run command to get sysstat results from script,
which is running on all children nodes. Returns cpu, network, memory usage statistics from the node for each 10 minutes
that node was running. Used for debug purposes. Returns whole output of sysstat.</doc>
<status status="PASS" start="2026-04-18T03:42:03.062743" elapsed="0.679087"/>
</kw>
<arg>Utils.Get_Sysstat_Statistics</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-18T03:42:03.061768" elapsed="0.680134"/>
</kw>
<kw name="Delete All Sessions" owner="RequestsLibrary">
<msg time="2026-04-18T03:42:03.742231" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-04-18T03:42:03.742124" elapsed="0.000394"/>
</kw>
<kw name="Close All Connections" owner="SSHLibrary">
<doc>Closes all open connections.</doc>
<status status="PASS" start="2026-04-18T03:42:03.742765" elapsed="0.000573"/>
</kw>
<doc>Make sure Python tool was killed and tear down imported Resources.</doc>
<status status="PASS" start="2026-04-18T03:42:03.033264" elapsed="0.710193"/>
</kw>
<doc>BGP performance of ingesting from 1 iBGP peer, data change counter is NOT used.

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

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


This suite uses play.py as single iBGP peer.
The suite only looks at example-ipv4-topology, so RIB is not examined.

The suite consists of two halves, differing on which side initiates BGP connection.
State of "work is being done" is detected by increasing value of prefixes in topology.
The time for Wait_For_Stable_* cases to finish is the main performance metric.
After waiting for stability is done, full check on number of prefixes present is performed.

Brief description how to configure BGP peer can be found here:
https://wiki.opendaylight.org/view/BGP_LS_PCEP:User_Guide#BGP_Peer
http://docs.opendaylight.org/en/stable-boron/user-guide/bgp-user-guide.html#bgp-peering

TODO: Currently, if a bug causes prefix count to remain at zero,
affected test cases will wait for max time. Reconsider.
If zero is allowed as stable, higher period or repetitions would be required.

The prefix counting is quite heavyweight and may induce large variation in time.
Try the other version of the suite (singlepeer_changecount.robot) to get better precision.</doc>
<status status="FAIL" start="2026-04-18T03:05:51.784419" elapsed="2171.959128"/>
</suite>
<status status="FAIL" start="2026-04-18T03:05:36.182339" elapsed="2187.562793"/>
</suite>
<statistics>
<total>
<stat pass="25" fail="14" skip="0">All Tests</stat>
</total>
<tag>
<stat pass="12" fail="6" skip="0">critical</stat>
</tag>
<suite>
<stat name="bgpcep-bgp-ingest-mixed.txt" id="s1" pass="25" fail="14" skip="0">bgpcep-bgp-ingest-mixed.txt</stat>
<stat name="Singlepeer Changecount" id="s1-s1" pass="11" fail="10" skip="0">bgpcep-bgp-ingest-mixed.txt.Singlepeer Changecount</stat>
<stat name="Singlepeer Prefixcount" id="s1-s2" pass="14" fail="4" skip="0">bgpcep-bgp-ingest-mixed.txt.Singlepeer Prefixcount</stat>
</suite>
</statistics>
<errors>
<msg time="2026-04-18T03:05:36.464619" level="WARN">Error in file '/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/BGPSpeaker.robot' on line 27: Suite 'bgpcep-bgp-ingest-mixed.txt.Singlepeer Changecount' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-18T03:05:36.471259" level="WARN">Error in file '/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/RemoteBash.robot' on line 25: Suite 'bgpcep-bgp-ingest-mixed.txt.Singlepeer Changecount' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-18T03:05:36.490516" level="WARN">Error in file '/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/SSHKeywords.robot' on line 16: Suite 'bgpcep-bgp-ingest-mixed.txt.Singlepeer Changecount' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-18T03:05:36.531573" level="WARN">Error in file '/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/Utils.robot' on line 4: Suite 'bgpcep-bgp-ingest-mixed.txt.Singlepeer Changecount' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-18T03:05:36.827169" level="WARN">Error in file '/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/KarafKeywords.robot' on line 9: Suite 'bgpcep-bgp-ingest-mixed.txt.Singlepeer Changecount' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-18T03:05:51.787407" level="WARN">Error in file '/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/BGPSpeaker.robot' on line 27: Suite 'bgpcep-bgp-ingest-mixed.txt.Singlepeer Prefixcount' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-18T03:05:51.788185" level="WARN">Error in file '/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/RemoteBash.robot' on line 25: Suite 'bgpcep-bgp-ingest-mixed.txt.Singlepeer Prefixcount' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-18T03:05:51.788890" level="WARN">Error in file '/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/SSHKeywords.robot' on line 16: Suite 'bgpcep-bgp-ingest-mixed.txt.Singlepeer Prefixcount' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-18T03:05:51.789467" level="WARN">Error in file '/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/Utils.robot' on line 4: Suite 'bgpcep-bgp-ingest-mixed.txt.Singlepeer Prefixcount' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-18T03:05:51.802473" level="WARN">Error in file '/w/workspace/bgpcep-csit-1node-bgp-ingest-mixed-all-vanadium/test/csit/libraries/KarafKeywords.robot' on line 9: Suite 'bgpcep-bgp-ingest-mixed.txt.Singlepeer Prefixcount' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
</errors>
</robot>
